基於nvm的Node、NPM的版本管理(NPM permission error的解決)

最近在使用npm過程當中,發現全局安裝總會遇到permission相關的錯誤,因此老是要在前面加sudo,還得不停輸入密碼。node

懶惰使我進步,隨手google了一下相關問題的解決方案,發現npm在官方文檔中早有明示How to Prevent Permissions Errors。據其描述,根本緣由實際上是Node.js安裝包將程序安裝在了一個只有local permissions的地址上(寫入是須要管理員權限的)。而其提供了兩種修復的方式,其中的推薦方式既是本文要說的nvm的方式。linux

nvm的優點

nvm(Node Version Manager)經過對node和npm集中的版本管理主要解決了兩個問題git

  1. 統一解決了node和npm版本管理的問題,nvm提供了很方便的機制可使咱們在同一終端上安裝多個版本的node和npm而且提供了快速切換版本的能力,這樣爲咱們檢測項目兼容性和bug定位提供了很大的幫助。
  2. 解決了本文一開始提到的種種permission的相關問題,自此不再用重複輸入sudo來進行全局安裝。

nvm的使用

這裏簡單介紹一下nvm在MacOS下的安裝和使用(注,nvm主要仍是面向mac os和linux用戶,使用windows的客官請看這裏github

安裝以前

在安裝以前,首先應該須要考慮一下是否要保留原有的系統安裝的node。nvm是能夠保留原有node來安裝的,也提供了切回system node的方式。npm

可是要注意
若是系統中存在多用戶,那麼當前安裝的nvm是隻針對你的,其它用戶若是沒有安裝則只能使用到系統安裝的node版本。二者全局安裝的node modules地址是不相同的( /usr/local/lib/node_modules/* VS ~/.nvm/versions/node/vX.X.X/lib/node_modules/*)。必定程度上是有版本不一致的風險的。

若是選擇卸載原有系統node,這裏有一篇很實用的講解windows

安裝

安裝方式比較簡單,只要執行如下的腳本。腳本clone了項目代碼,並進行了環境變量的設置。若是出現問題能夠查看github上的trouble shooting。bash

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

在安裝完後,關掉終端重開一個新的,輸入如下指令驗證安裝。curl

command -v nvm       # should return nvm

注:可使用同一腳原本自動更新nvmgoogle

使用

安裝完後,使用起來就很是簡單明快了,如下是一些經常使用功能url

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版本的便捷方式,無論是安裝、切換、刪除均可以一步到位,無疑是現階段的首選。

相關文章
相關標籤/搜索