使用 nvm 管理不同版本的 node 與 npm


在我們的日常開發中經常會遇到這種情況:手上有好幾個項目,每個項目的需求不同,進而不同項目必須依賴不同版的 NodeJS 運行環境。如果沒有一個合適的工具,這個問題將非常棘手。

nvm 應運而生,nvm 是 Mac 下的 node 管理工具,有點類似管理 Ruby 的 rvm,如果需要管理 Windows 下的 node,官方推薦使用 nvmw 或 nvm-windows。不過,nvm-windows 並不是 nvm 的簡單移植,他們也沒有任何關系。但下面介紹的所有命令,都可以在 nvm-windows 中運行。

nvm 與 n 的區別

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

由於 npm 安裝的模塊路徑均為 /usr/local/lib/node_modules,當使用 n 切換不同的 node 版本時,實際上會共用全局的 node/npm 目錄。 因此不能很好的滿足『按不同 node 版本使用不同全局 node 模塊』的需求。

卸載全局安裝的 node/npm

在官網下載的 node 安裝包,運行后會自動安裝在全局目錄,使用過程中經常會遇到一些權限問題,所以推薦按照以下方法卸載全局安裝的 node/npm。

首先,打開你 Finder,按 shift+command+G,打開前往文件夾的窗口,分別輸入下列目錄進去之后刪除 node 和 node_modules 相關的文件和文件夾:

  • 打開 /usr/local/lib,刪除 node 和 node_modules 相關的文件和文件夾
  • 打開 /usr/local/include,刪除 node 和 node_modules 相關的文件和文件夾
  • 如果你是使用的 brew install node 安裝的 NodeJS,那么你還需要在終端中執行 brew uninstall node 命令來卸載
  • 檢查你的個人主文件夾下面的所有的 locallib 以及 include 文件夾,並且刪除所有與 node 和 node_modules 相關的文件以及文件夾
  • 打開 /usr/local/bin 並刪除 node 可執行文件

你可能還需要在你的終端中輸入一些額外的指令:

1
2
3
4
5
6
7
8
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

Windows 安裝

首先最重要的是:一定要卸載已安裝的 NodeJS,否則會發生沖突。然后下載 nvm-windows 最新安裝包,直接安裝即可。

OS X/Linux 安裝

與 Windows 不同,我們並不一定要先卸載原有的 NodeJS。當然我們推薦還是先卸載掉比較好。另外,你還需要 C++ 編譯器,Linux 發行版一般不用擔心,像 Ubuntu 都可以直接用 build-essential 套件,OS X 的話,可以用 X-Code 的命令行工具。運行這個命令即可:

1
xcode-select --install

在 Linux 中:(如果是 Debian 發行版)

1
sudo apt-get install build-essential

然后我們可以使用

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

或者

1
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

從遠程下載 install.sh 腳本並執行。注意這個版本年數字 v0.33.0 會隨着項目開發而變化。隨時通過官方最新安裝命令來檢查最新安裝版本是有好處的。

安裝多版本 node/npm

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

1
nvm install 4.2.2

nvm 遵守語義化版本命名規則。例如,你想安裝最新的 4.2 系列的最新的一個版本的話,可以運行:

1
nvm install 4.2

nvm 會尋找 4.2.x 中最高的版本來安裝。

你可以通過以下命令來列出遠程服務器上所有的可用版本:

1
nvm ls-remote

Windows 的話,就是:

1
nvm ls available

在不同版本間切換

每當我們安裝了一個新版本 Node 后,全局環境會自動把這個新版本設置為默認。

nvm 提供了 nvm use 命令。這個命令的使用方法和 install 命令類似。

例如,切換到 4.2.2

1
nvm use 4.2.2

切換到最新的 `4.2.x``:

1
nvm use 4.2

切換到 iojs:

1
nvm use iojs-v3.2.0

切換到最新版:

1
nvm use node

每次執行切換的時候,系統都會把 node 的可執行文件鏈接放到特定版本的文件上。

我們還可以用 nvm 給不同的版本號設置別名:

1
nvm alias awesome-version 4.2.2

我們給 4.2.2 這個版本號起了一個名字叫做 awesome-version,然后我們可以運行:

1
nvm use awesome-version

下面這個命令可以取消別名:

1
nvm unalias awesome-version

另外,你還可以設置 default 這個特殊別名:

1
nvm alias default node

列出已安裝實例

1
nvm ls

nvm lsnvm ls

上面綠色箭頭是當前正在使用的版本,下面列出的還有設置過的別名。

在項目中使用不同版本的 Node

我們可以通過創建項目目錄中的 .nvmrc 文件來指定要使用的 Node 版本。之后在項目目錄中執行 nvm use 即可。.nvmrc 文件內容只需要遵守上文提到的語義化版本規則即可。另外還有個工具叫做 avn,可以自動化這個過程。

在多環境中,npm該如何使用呢?

每個版本的 Node 都會自帶一個不同版本的 npm,可以用 npm -v 來查看 npm 的版本。全局安裝的 npm 包並不會在不同的 Node 環境中共享,因為這會引起兼容問題。它們被放在了不同版本的目錄下,例如 ~/.nvm/versions/node/<version>/lib/node_modules</version> 這樣的目錄。這剛好也省去我們在 Linux 中使用 sudo 的功夫了。因為這是用戶的主文件夾,並不會引起權限問題。

但問題來了,我們安裝過的 npm 包,都要重新再裝一次?幸運的是,我們有個辦法來解決我們的問題,運行下面這個命令,可以從特定版本導入到我們將要安裝的新版本 Node:

1
nvm install v5.0.0 --reinstall-packages-from=4.2

其他命令

直接運行特定版本的 Node

1
nvm run 4.2.2 --version

在當前終端的子進程中運行特定版本的 Node

1
nvm exec 4.2.2 node --version

確認某個版本Node的路徑

1
nvm which 4.2.2

安裝 Node 的其他實現,例如 iojs(一個基於 ES6 的 Node 實現,現在已經和 Node 合並)

1
nvm install iojs-v3.2.0

快捷命令:

  • nvm install node 安裝最新版 Node
  • nvm install iojs 安裝最新版 iojs
  • nvm install unstable 安裝最新不穩定版本的 Node

參考資源


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM