使用 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 命令來卸載
- 檢查你的個人主文件夾下面的所有的 local 、 lib 以及 include 文件夾,并且刪除所有與 node 和 node_modules 相關的文件以及文件夾
- 打開 /usr/local/bin 并刪除 node 可執行文件
你可能還需要在你的終端中輸入一些額外的指令:
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 的命令行工具。運行這個命令即可:
xcode-select --install
在 Linux 中:(如果是 Debian 發行版)
sudo apt-get install build-essential
然后我們可以使用
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
從遠程下載 install.sh 腳本并執行。注意這個版本年數字 v0.33.0 會隨著項目開發而變化。隨時通過 官方最新安裝命令 來檢查最新安裝版本是有好處的。
安裝多版本 node/npm
例如,我們要安裝4.2.2版本,可以用如下命令:
nvm install 4.2.2
nvm 遵守 語義化版本 命名規則。例如,你想安裝最新的 4.2 系列的最新的一個版本的話,可以運行:
nvm install 4.2
nvm 會尋找 4.2.x 中最高的版本來安裝。
你可以通過以下命令來列出遠程服務器上所有的可用版本:
nvm ls-remote
Windows 的話,就是:
nvm ls available
在不同版本間切換
每當我們安裝了一個新版本 Node 后,全局環境會自動把這個新版本設置為默認。
nvm 提供了 nvm use 命令。這個命令的使用方法和 install 命令類似。
例如,切換到 4.2.2 :
nvm use 4.2.2
切換到最新的 `4.2.x``:
nvm use 4.2
切換到 iojs:
nvm use iojs-v3.2.0
切換到最新版:
nvm use node
每次執行切換的時候,系統都會把 node 的可執行文件鏈接放到特定版本的文件上。
我們還可以用 nvm 給不同的版本號設置別名:
nvm alias awesome-version 4.2.2
我們給 4.2.2 這個版本號起了一個名字叫做 awesome-version ,然后我們可以運行:
nvm use awesome-version
下面這個命令可以取消別名:
nvm unalias awesome-version
另外,你還可以設置 default 這個特殊別名:
nvm alias default node
列出已安裝實例
nvm 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:
nvm install v5.0.0 --reinstall-packages-from=4.2
其他命令
直接運行特定版本的 Node
nvm run 4.2.2 --version
在當前終端的子進程中運行特定版本的 Node
nvm exec 4.2.2 node --version
確認某個版本Node的路徑
nvm which 4.2.2
安裝 Node 的其他實現,例如 iojs(一個基于 ES6 的 Node 實現,現在已經和 Node 合并)
nvm install iojs-v3.2.0
快捷命令:
- nvm install node 安裝最新版 Node
- nvm install iojs 安裝最新版 iojs
- nvm install unstable 安裝最新不穩定版本的 Node
來自:http://bubkoo.com/2017/01/08/quick-tip-multiple-versions-node-nvm/