前言:
日常開發中,手上有好幾個項目,每個項目的需求不同,進而不同項目必須依賴不同版本不同版的NodeJS運作環境,nvm應運而生,nvm是Mac下的node管理工具,有點類似Ruby的rvm,如果需要管理Windows下的node,官方推薦nvmw或者nvm-windows。不過,nvm-windows并不是nvm的簡單移植。
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
- 如果你是使用的
安裝的 NodeJS,那麼你還需要在終端中執行brew install node
指令來解除安裝brew uninstall node
- 檢查你的個人主檔案夾下面的所有的
、local
以及lib
檔案夾,并且删除所有與include
和node
相關的檔案以及檔案夾node_modules
- 打開
并删除/usr/local/bin
可執行檔案node
你可能還需要在你的終端中輸入一些額外的指令:
| |
Windows安裝
首先最重要的是:一定要解除安裝已安裝的 NodeJS,否則會發生沖突。然後下載下傳 nvm-windows 最新安裝包,直接安裝即可。
OSX/Linux安裝
與 Windows 不同,我們并不一定要先解除安裝原有的 NodeJS。當然我們推薦還是先解除安裝掉比較好。另外,你還需要 C++ 編譯器,Linux 發行版一般不用擔心,像 Ubuntu 都可以直接用
build-essential
套件,OS X 的話,可以用
X-Code
的指令行工具。運作這個指令即可:
| |
在 Linux 中:(如果是 Debian 發行版)
| |
然後我們可以使用
| |
或者
| |
從遠端下載下傳
install.sh
腳本并執行。注意這個版本年數字
v0.33.0
會随着項目開發而變化。随時通過官方最新安裝指令來檢查最新安裝版本是有好處的。
安裝多版本node/npm
例如,我們要安裝4.2.2版本,可以用如下指令:
| |
nvm 遵守語義化版本命名規則。例如,你想安裝最新的
4.2
系列的最新的一個版本的話,可以運作:
| |
nvm 會尋找
4.2.x
中最高的版本來安裝。
你可以通過以下指令來列出遠端伺服器上所有的可用版本:
| |
Windows 的話,就是:
| |
在不同版本間切換
每當我們安裝了一個新版本 Node 後,全局環境會自動把這個新版本設定為預設。
nvm 提供了
nvm use
指令。這個指令的使用方法和
install
指令類似。
例如,切換到
4.2.2
:
| |
切換到最新的 `4.2.x``:
| |
切換到 iojs:
| |
切換到最新版:
| |
每次執行切換的時候,系統都會把 node 的可執行檔案連結放到特定版本的檔案上。
我們還可以用 nvm 給不同的版本号設定别名:
| |
我們給
4.2.2
這個版本号起了一個名字叫做
awesome-version
,然後我們可以運作:
| |
下面這個指令可以取消别名:
| |
另外,你還可以設定
default
這個特殊别名:
| |
列出已安裝執行個體
| |
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:
| |
其他指令
直接運作特定版本的 Node
| |
在目前終端的子程序中運作特定版本的 Node
| |
确認某個版本Node的路徑
| |
安裝 Node 的其他實作,例如 iojs(一個基于 ES6 的 Node 實作,現在已經和 Node 合并)
| |
快捷指令:
-
安裝最新版 Nodenvm install node
-
安裝最新版 iojsnvm install iojs
-
安裝最新不穩定版本的 Nodenvm install unstable