1. 程式人生 > >解決mac上每次升級nodejs都要重新安裝擴展包的問題

解決mac上每次升級nodejs都要重新安裝擴展包的問題

發現 分享 nodejs安裝 時間 med dia gty 每次 module

技術分享圖片
雖然有了一些新生派競品比如yarn,但使用或者習慣了npm的開發者仍然大有人在。

以前用起來沒註意到這個現象,最近一段時間發現,每次隨著使用brew upgrade自動升級了nodejs版本,原來安裝的nodejs擴展包就不起作用了,還需要重新安裝一遍。再加上一些擴展包存儲網站被墻的問題,這個過程真是令人痛不欲生。
今天比較閑了研究了一下,發現原來的擴展包都是通過npm安裝到/usr/local/lib/node_modules目錄。這種設置每次升級並不影響不同版本nodejs同擴展包的配合。不過因為命令行的nodejs工具沒有導出到執行路徑,所以無法直接運行(比如@angular/cli)。所以在當時,我曾經手工在/etc/paths中增加了搜索執行路徑:/usr/local/lib/node_modules/bin。

當前的nodejs版本,使用npm安裝的擴展包,已經默認安裝到了nodejs安裝目錄之下。使用brew安裝的話,這個路徑通常是:/usr/local/Cellar/node/xx.xx.xx版本號/。因為不同版本位於不同目錄,老版本習慣上又被清理掉了的話,那nodejs擴展包當然也要重新安裝了。還有一個同時帶來的煩人問題,因為這個路徑經常變化,執行文件搜索路徑也要每次修改。

知道了原因,解決起來也簡單:

#刪除掉早期的擴展包路徑,這個文件夾實際上已經不使用了
#沒有安裝過早期版本的話,沒有這個路徑,當然不用刪除
sudo rm -rf /usr/local/lib/node_modules

#自己建立一個擴展包安裝路徑
sudo mkdir /usr/local/npm
#設置權限
sudo chown $USER:admin /usr/local/npm

#讓npm將擴展包安裝到指定路徑
echo prefix=/usr/local/npm >> ~/.npmrc

#設置執行搜索路徑
sudo echo /usr/local/npm/bin >> /etc/paths

這樣以後nodejs版本的升級,就不會影響擴展包了。

解決mac上每次升級nodejs都要重新安裝擴展包的問題