簡介
在我們的日常開發中經常會遇到這種情況:手上有好幾個項目,每個項目的需求不同,進而不同項目必須依賴不同版的 NodeJS 運行環境。如果沒有一個合適的工具,這個問題將非常棘手。
nvm 應運而生,nvm 是 Mac 下的 node 管理工具
安裝
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 模塊』的需求。
常用命令
nvm ls-remote
列出所有可安裝的版本
nvm install <version>
安裝指定的版本,如 nvm install v8.14.0
nvm uninstall <version>
卸載指定的版本
nvm ls
列出所有已經安裝的版本
nvm use <version>
切換使用指定的版本
nvm current
顯示當前使用的版本
nvm alias default <version>
設置默認 node
版本
nvm deactivate
解除當前版本綁定
注意:nvm 默認是不能刪除被設定為 default 版本的 node,特別是只安裝了一個 node 的時候,這個時候我們需要先解除當前版本綁定,然后再使用 nvm uninstall <version>
刪除
在不同版本間切換
每當我們安裝了一個新版本 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
上面綠色箭頭是當前正在使用的版本,下面列出的還有設置過的別名。
在多環境中,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
參考