在我們的日常開發(fā)中有沒有遇到這樣的問題: 手上有好幾個項目瓢湃,每個項目依賴不同版的 NodeJS 運行環(huán)境嘶是,又不敢茫然把所有的依賴版本都升級為最新的,那么有沒有這樣一個工具可以分別管理不同版本的node環(huán)境呢锨咙?答案是肯定的裂逐。
nvm 就是為解決這個問題的,nvm 是 Mac 下的 node 管理工具逊桦,有點類似管理 Ruby 的 rvm眨猎。
nvm VS n
node 版本管理工具還有一個是 TJ大神的 n 命令,n 命令是作為一個 node 的模塊而存在强经,而 nvm 是一個獨立于 node/npm 的外部 shell 腳本宵呛,因此 n 命令相比 nvm 更加局限。
由于 npm 安裝的模塊路徑均為 /usr/local/lib/node_modules
夕凝,當(dāng)使用 n 切換不同的 node 版本時宝穗,實際上會共用全局的 node/npm 目錄。 因此不能很好的滿足按不同 node 版本使用不同全局 node 模塊的需求码秉。
卸載全局安裝的 node/npm
在官網(wǎng)下載的 node 安裝包逮矛,運行后會自動安裝在全局目錄,使用過程中經(jīng)常會遇到一些權(quán)限問題转砖,所以推薦按照以下方法卸載全局安裝的 node/npm须鼎。
首先,打開你 Finder府蔗,按 shift+command+G
晋控,打開前往文件夾的窗口,分別輸入下列目錄進(jìn)去之后刪除 node
和 node_modules
相關(guān)的文件和文件夾:
- 打開
/usr/local/lib
姓赤,刪除node
和node_modules
相關(guān)的文件和文件夾 - 打開
/usr/local/include
赡译,刪除node
和node_modules
相關(guān)的文件和文件夾 - 如果你是使用的
brew install node
安裝的 NodeJS,那么你還需要在終端中執(zhí)行brew uninstall node
命令來卸載 - 檢查你的個人主文件夾下面的所有的
local
不铆、lib
以及include
文件夾蝌焚,并且刪除所有與node
和node_modules
相關(guān)的文件以及文件夾 - 打開
/usr/local/bin
并刪除node
可執(zhí)行文件
你可能還需要在你的終端中輸入一些額外的指令:
sudo rm /usr/local/bin/npm
sudo rm /usr/local/share/man/man1/node.1
sudo rm /usr/local/lib/dtrace/node.d
sudo rm -rf ~/.npm
sudo rm -rf ~/.node-gyp
sudo rm /opt/local/bin/node
sudo rm /opt/local/include/node
sudo rm -rf /opt/local/lib/node_modules
安裝
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash
從遠(yuǎn)程下載 install.sh
腳本并執(zhí)行。注意這個版本年數(shù)字 v0.33.11
會隨著項目開發(fā)而變化誓斥。隨時通過官方最新安裝命令來檢查最新安裝版本是有好處的只洒。
安裝多版本 node/npm
例如,我們要安裝8.12.0版本劳坑,可以用如下命令:
nvm install 8.12.0
nvm 遵守語義化版本命名規(guī)則毕谴。例如,你想安裝最新的 8.12
系列的最新的一個版本的話距芬,可以運行:
nvm install 8.12
nvm 會尋找 8.12.x
中最高的版本來安裝涝开。
你可以通過以下命令來列出遠(yuǎn)程服務(wù)器上所有的可用版本:
nvm ls-remote
切換不同版本
每當(dāng)我們安裝了一個新版本 Node 后,全局環(huán)境會自動把這個新版本設(shè)置為默認(rèn)蔑穴。
nvm 提供了 nvm use
命令忠寻。這個命令的使用方法和 install
命令類似。
我當(dāng)前版本是6.4.1
存和,切換到剛安裝的最新的版本 8.12.0
:
nvm use 8.12.0
也可以使用以下命令切換到最新版:
nvm use node
每次執(zhí)行切換的時候奕剃,系統(tǒng)都會把 node 的可執(zhí)行文件鏈接放到特定版本的文件上。
我們還可以用 nvm 給不同的版本號設(shè)置別名:
nvm alias Latest-LTS-version 8.12.0
我們給 8.12.0
這個版本號起了一個名字叫做 Latest-LTS-version
捐腿,然后我們可以運行:
nvm use Latest-LTS-version
當(dāng)然也可以通過下面這個命令取消別名:
nvm unalias Latest-LTS-version
列出已安裝的node版本
nvm ls
綠色箭頭是當(dāng)前正在使用的版本
在項目中使用不同版本的 Node
我們可以通過創(chuàng)建項目目錄中的 .nvmrc
文件來指定要使用的 Node 版本纵朋。之后在項目目錄中執(zhí)行 nvm use
即可。.nvmrc
文件內(nèi)容只需要遵守上文提到的語義化版本規(guī)則即可茄袖。另外還有個工具叫做 avn操软,可以自動化這個過程。
在多環(huán)境中宪祥,npm該如何使用呢聂薪?
每個版本的 Node 都會自帶一個不同版本的 npm家乘,可以用 npm -v
來查看 npm 的版本。全局安裝的 npm 包并不會在不同的 Node 環(huán)境中共享藏澳,因為這會引起兼容問題仁锯。它們被放在了不同版本的目錄下,例如 ~/.nvm/versions/node/<version>/lib/node_modules</version>
這樣的目錄
那么問題來了翔悠,我們安裝過的 npm 包业崖,都要重新再裝一次?幸運的是蓄愁,我們有個辦法來解決我們的問題双炕,運行下面這個命令,可以從特定版本導(dǎo)入到我們將要安裝的新版本 Node:
8.12.0
nvm install v7.3.0 --reinstall-packages-from=6.11.0
其他命令
- 直接運行特定版本的 Node
nvm run 7.3.0 --version
- 在當(dāng)前終端的子進(jìn)程中運行特定版本的 Node
nvm exec 7.3.0 node --version
- 確認(rèn)某個版本Node的路徑
nvm which 7.3.0
- 安裝最新版 Node
nvm install node
- 安裝最新不穩(wěn)定版本的 Node
nvm install unstable