最近在使用npm過程中,發現全域性安裝總會遇到permission相關的錯誤,所以總是要在前面加sudo,還得不停輸入密碼。
懶惰使我進步,隨手google了一下相關問題的解決方案,發現npm在官方文件中早有明示How to Prevent Permissions Errors。據其描述,根本原因其實是Node.js安裝包將程式安裝在了一個只有local permissions的地址上(寫入是需要管理員許可權的)。而其提供了兩種修復的方式,其中的推薦方式既是本文要說的nvm的方式。
nvm的優勢
nvm(Node Version Manager)通過對node和npm集中的版本管理主要解決了兩個問題
- 統一解決了node和npm版本管理的問題,nvm提供了很方便的機制可以使我們在同一終端上安裝多個版本的node和npm並且提供了快速切換版本的能力,這樣為我們檢測專案相容性和bug定位提供了很大的幫助。
- 解決了本文一開始提到的種種permission的相關問題,自此再也不用重複輸入sudo來進行全域性安裝。
nvm的使用
這裡簡單介紹一下nvm在MacOS下的安裝和使用(注,nvm主要還是面向mac os和linux使用者,使用windows的客官請看這裡)
安裝之前
在安裝之前,首先應該需要考慮一下是否要保留原有的系統安裝的node。nvm是可以保留原有node來安裝的,也提供了切回system node
的方式。
但是要注意:
如果系統中存在多使用者,那麼當前安裝的nvm是隻針對你的,其它使用者如果沒有安裝則只能使用到系統安裝的node版本。兩者全域性安裝的node modules地址是不相同的(/usr/local/lib/node_modules/*
VS~/.nvm/versions/node/vX.X.X/lib/node_modules/*
)。一定程度上是有版本不一致的風險的。
如果選擇解除安裝原有系統node,這裡有一篇很實用的講解
安裝
安裝方式比較簡單,只要執行以下的指令碼。指令碼clone了專案程式碼,並進行了環境變數的設定。如果出現問題可以檢視github上的trouble shooting。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
在安裝完後,關掉終端重開一個新的,輸入以下指令驗證安裝。
command -v nvm # should return nvm
注:可以使用同一指令碼來自動更新nvm
使用
安裝完後,使用起來就非常簡單明快了,以下是一些常用功能
1. 安裝某一版本的node nvm install
nvm install --lts #安裝最新的lts版本的node
nvm install node #安裝最新版本的node
nvm install 6.14.4 #安裝node版本6.14.4
2. 列出所有node版本
nvm ls #本機所有版本
nvm ls -remote #遠端所有版本
3. 切換、使用某一版本的node nvm use
nvm use --lts #使用最新的lts版本的node
nvm use node #使用最新版本的node
nvm use 6.14.4 #使用node版本6.14.4
4. 啟動node nvm run
nvm run --lts #啟動最新的lts版本的node
nvm run node #啟動最新版本的node
nvm run 6.14.4 #啟動node版本6.14.4
5. 使用某一版本執行
nvm exec 4.2 node --version
6. 查詢某一版本的安裝位置
nvm which 5.0
node, –lts都是nvm自動維護的別稱,表示最新版本和最新的long-term support版本。
另,system同樣也是別稱,表示node的非nvm安裝的system版本
關於既有的node modules
可以使用--reinstall-packages-from=node
來自動在新的node中安裝上一版本已有的node modules
nvm install node --reinstall-packages-from=node #從上一版本繼承
nvm install 6 --reinstall-packages-from=5 #從某一版本繼承
關於映象
很神祕的是nvm windows很貼心的提供了命令列設定映象的命令,而mvn木有,所以只好手動來。
nvm node安裝映象
1 手動方案,每次執行nvm安裝時,執行
export NVM_NODEJS_ORG_MIRROR=https://nodejs.org/dist
nvm install node
2 永久方案,當然是將export放到~/.bashrc
中
npm映象
npm install的安裝速度也是很感人的。所以,安裝完node一般會把npm的映象也設定成淘寶滴。
npm config set registry https://registry.npm.taobao.org
注:勸君莫用cnpm,與npm基本無異,然而經常會出一些想不到的bug。
解除安裝
nvm的解除安裝是手動完成的,但是不復雜。
首先,刪掉nvm檔案
$ rm -rf "$NVM_DIR"
隨後,修復環境變數,修改~/.bashrc
(如果沒有就去bash_profile找找),刪掉以下這幾行
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
[[ -r $NVM_DIR/bash_completion ]] && . $NVM_DIR/bash_completion
搞定。
總結
mvn提供了一種管理Node.js版本的便捷方式,不管是安裝、切換、刪除都可以一步到位,無疑是現階段的首選。