四、Mac上使用 nvm 管理不同版本的 node

在我們的日常開(kāi)發(fā)中有沒(méi)有遇到這樣的問(wèn)題: 手上有好幾個(gè)項(xiàng)目,每個(gè)項(xiàng)目依賴不同版的 NodeJS 運(yùn)行環(huán)境,又不敢茫然把所有的依賴版本都升級(jí)為最新的,那么有沒(méi)有這樣一個(gè)工具可以分別管理不同版本的node環(huán)境呢?答案是肯定的。

nvm 就是為解決這個(gè)問(wèn)題的,nvm 是 Mac 下的 node 管理工具,有點(diǎn)類(lèi)似管理 Ruby 的 rvm。

nvm VS n

node 版本管理工具還有一個(gè)是 TJ大神的 n 命令,n 命令是作為一個(gè) node 的模塊而存在,而 nvm 是一個(gè)獨(dú)立于 node/npm 的外部 shell 腳本,因此 n 命令相比 nvm 更加局限。

由于 npm 安裝的模塊路徑均為 /usr/local/lib/node_modules,當(dāng)使用 n 切換不同的 node 版本時(shí),實(shí)際上會(huì)共用全局的 node/npm 目錄。 因此不能很好的滿足按不同 node 版本使用不同全局 node 模塊的需求。

卸載全局安裝的 node/npm

在官網(wǎng)下載的 node 安裝包,運(yùn)行后會(huì)自動(dòng)安裝在全局目錄,使用過(guò)程中經(jīng)常會(huì)遇到一些權(quán)限問(wèn)題,所以推薦按照以下方法卸載全局安裝的 node/npm。

首先,打開(kāi)你 Finder,按 shift+command+G,打開(kāi)前往文件夾的窗口,分別輸入下列目錄進(jìn)去之后刪除 nodenode_modules 相關(guān)的文件和文件夾:

  • 打開(kāi) /usr/local/lib,刪除 nodenode_modules 相關(guān)的文件和文件夾
  • 打開(kāi) /usr/local/include,刪除 nodenode_modules 相關(guān)的文件和文件夾
  • 如果你是使用的 brew install node 安裝的 NodeJS,那么你還需要在終端中執(zhí)行 brew uninstall node 命令來(lái)卸載
  • 檢查你的個(gè)人主文件夾下面的所有的 locallib 以及 include 文件夾,并且刪除所有與 nodenode_modules 相關(guān)的文件以及文件夾
  • 打開(kāi) /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í)行。注意這個(gè)版本年數(shù)字 v0.33.11 會(huì)隨著項(xiàng)目開(kāi)發(fā)而變化。隨時(shí)通過(guò)官方最新安裝命令來(lái)檢查最新安裝版本是有好處的。

安裝多版本 node/npm

例如,我們要安裝8.12.0版本,可以用如下命令:

nvm install 8.12.0

nvm 遵守語(yǔ)義化版本命名規(guī)則。例如,你想安裝最新的 8.12 系列的最新的一個(gè)版本的話,可以運(yùn)行:

nvm install 8.12

nvm 會(huì)尋找 8.12.x 中最高的版本來(lái)安裝。

你可以通過(guò)以下命令來(lái)列出遠(yuǎn)程服務(wù)器上所有的可用版本:

nvm ls-remote

image

切換不同版本

每當(dāng)我們安裝了一個(gè)新版本 Node 后,全局環(huán)境會(huì)自動(dòng)把這個(gè)新版本設(shè)置為默認(rèn)。

nvm 提供了 nvm use 命令。這個(gè)命令的使用方法和 install 命令類(lèi)似。

我當(dāng)前版本是6.4.1,切換到剛安裝的最新的版本 8.12.0

nvm use 8.12.0

也可以使用以下命令切換到最新版:

nvm use node

每次執(zhí)行切換的時(shí)候,系統(tǒng)都會(huì)把 node 的可執(zhí)行文件鏈接放到特定版本的文件上。

我們還可以用 nvm 給不同的版本號(hào)設(shè)置別名:

nvm alias Latest-LTS-version 8.12.0

我們給 8.12.0 這個(gè)版本號(hào)起了一個(gè)名字叫做 Latest-LTS-version,然后我們可以運(yùn)行:

nvm use Latest-LTS-version

當(dāng)然也可以通過(guò)下面這個(gè)命令取消別名:

nvm unalias Latest-LTS-version

列出已安裝的node版本

nvm ls

image

綠色箭頭是當(dāng)前正在使用的版本

在項(xiàng)目中使用不同版本的 Node

我們可以通過(guò)創(chuàng)建項(xiàng)目目錄中的 .nvmrc 文件來(lái)指定要使用的 Node 版本。之后在項(xiàng)目目錄中執(zhí)行 nvm use 即可。.nvmrc 文件內(nèi)容只需要遵守上文提到的語(yǔ)義化版本規(guī)則即可。另外還有個(gè)工具叫做 avn,可以自動(dòng)化這個(gè)過(guò)程。

在多環(huán)境中,npm該如何使用呢?

每個(gè)版本的 Node 都會(huì)自帶一個(gè)不同版本的 npm,可以用 npm -v 來(lái)查看 npm 的版本。全局安裝的 npm 包并不會(huì)在不同的 Node 環(huán)境中共享,因?yàn)檫@會(huì)引起兼容問(wèn)題。它們被放在了不同版本的目錄下,例如 ~/.nvm/versions/node/<version>/lib/node_modules</version> 這樣的目錄

那么問(wèn)題來(lái)了,我們安裝過(guò)的 npm 包,都要重新再裝一次?幸運(yùn)的是,我們有個(gè)辦法來(lái)解決我們的問(wèn)題,運(yùn)行下面這個(gè)命令,可以從特定版本導(dǎo)入到我們將要安裝的新版本 Node:
8.12.0

nvm install v7.3.0 --reinstall-packages-from=6.11.0

其他命令

  • 直接運(yùn)行特定版本的 Node
nvm run 7.3.0 --version

  • 在當(dāng)前終端的子進(jìn)程中運(yùn)行特定版本的 Node
nvm exec 7.3.0 node --version

  • 確認(rèn)某個(gè)版本Node的路徑
nvm which 7.3.0

  • 安裝最新版 Node
nvm install node

  • 安裝最新不穩(wěn)定版本的 Node
nvm install unstable

注:
不要用homebrew下載nvm避免出錯(cuò)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在我們的日常開(kāi)發(fā)中有沒(méi)有遇到這樣的問(wèn)題: 手上有好幾個(gè)項(xiàng)目,每個(gè)項(xiàng)目依賴不同版的 NodeJS 運(yùn)行環(huán)境,又不敢茫...
    giants_one閱讀 9,779評(píng)論 0 9
  • 在我們的日常開(kāi)發(fā)中經(jīng)常會(huì)遇到這種情況:手上有好幾個(gè)項(xiàng)目,每個(gè)項(xiàng)目的需求不同,進(jìn)而不同項(xiàng)目必須依賴不同版的 Node...
    i5yue閱讀 2,085評(píng)論 0 1
  • 1.卸載已安裝到全局的 node/npm 如果之前是在官網(wǎng)下載的 node 安裝包,運(yùn)行后會(huì)自動(dòng)安裝在全局目錄,其...
    張先森Mr_zhang閱讀 22,340評(píng)論 2 21
  • 最近 NodeJS 的版本更新速度有點(diǎn) Chrome 的跡象,4.0 版本沒(méi)發(fā)布多久,又推出了 5.0 。升級(jí) N...
    落葉05閱讀 590評(píng)論 0 0
  • 1,前言 注意:此教程僅限Windows,Mac可能不適用 在我們的日常開(kāi)發(fā)中可能會(huì)遇到這種情況:手上有好幾個(gè)項(xiàng)目...
    鵬多多閱讀 1,577評(píng)論 0 1

友情鏈接更多精彩內(nèi)容