譯者導讀
如果使用過Python,可能對Python的多版本共存有印象。Python3雖然是目前推薦的版本,但是Python2仍然有許多Lib沒有支持到Python3。此時我們可以用pyenv或者virtualenv或者直接用官方最新的的pyvenv。
同樣的,在Node.js中,我們也能實現這個功能。
正文
當我們在開發的時候,通常會遇到這麼一種情況:手上有好幾個項目,每個項目有不同需求,而不同項目必須運行在不同版本的Node.js中。如果沒有一個合適的工具,那這個問題將會很難解決。因此,nvm誕生了。
安裝nvm
nvm是Node Version Manager的縮寫(注意不是Virtual Machine)。從名字看出,nvm就是一個版本管理器。它提供了一個命令行接口讓我們可以用一個命令安裝不同版本的Node,讓我們可以設置默認環境,並在不同環境中切換。
操作系統支持
nvm支持Linux和OSX,但這並不是說Window不能用。nvm-windows就是在Windows上運行的版本。不過,nvm-windows並不是nvm的簡單移植,也和它沒有任何關係。但下面介紹的所有命令,都可以運行在nvm-windows中。
安裝
Windows
首先最重要的是:一定要卸載原本已經安裝過的Node.js,否則會發生衝突的。然後下載nvm-windows最新的安裝包。直接安裝即可。
OS X/Linux
和Windows不同,我們並不一定要先卸載原有的Node。當然我們推薦還是先卸載掉比較好。另外,你還需要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.31.0/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.0/install.sh | bash
從遠程下載install.sh
腳本並執行。注意這個版本年數字(v0.31.0)會隨着項目開發而變化。隨時通過官方最新安裝命令來檢查最新安裝版本是有好處的。
使用nvm
如果安裝成功了,我們可以從命令行運行命令nvm
。
安裝多版本Node.js
例如,我們要安裝4.2.2版本,可以用如下命令:
nvm install 4.2.2
nvm遵守語義化版本命名規則。例如,你想安裝最新的4.2系列的最新的一個版本的話,可以運行:
nvm install 4.2
nvm會尋找4.2.x中最高的版本來安裝。在寫作本文的時候,x=6。
你可以通過以下命令來列出遠程服務器上所有的可用版本:
nvm ls-remote
Windows的話,就是:
nvm ls available
在多環境中,npm該如何使用呢?
每個版本的Node都會自帶一個不同版本的npm,可以用npm -v
來查看npm的版本。全局安裝的npm包並不會在不同的Node環境中共享,因爲這會引起兼容問題。它們被放在了不同版本的目錄下,例如~/.nvm/versions/node/<version>/lib/node_modules
這樣的目錄。這剛好也省去我們在Linux中使用sudo的功夫了。因爲這是用戶的主文件夾,並不會引起權限問題。
但問題來了,我要裝的每個版本的Node裏的包,都要重新再裝一次?幸運的是,我們有個辦法來解決我們的問題,運行下面這個命令,可以從特定版本導入到我們將要安裝的新版本Node
nvm install v5.0.0 --reinstall-packages-from=4.2
除此之外,npm還可以安裝Node的其他實現。例如iojs(一個基於ES6的Node實現,現在已經和Node合併,不再開發——譯者注)
nvm install iojs-v3.2.0
上面的命令講會安裝iojs到系統中。
下面幾個是方便我們使用的快捷命令:
node
– 安裝最新版Nodeiojs
– 安裝最新版iojs(目前iojs已經停止開發——譯者注)unstable
– 安裝最新不穩定版本的Node
例如,我們可以用下面的命令直接安裝最新版Node:
nvm uninstall 4.2.2
在不同版本間切換
首先,每當我們安裝了一個新版本Node後,全局環境會自動把這個新版本設置爲默認。
nvm提供了一個命令nvm use
。這個命令的使用方法和install命令類似。例如,切換到4.2.2:
nvm use 4.2.2
切換到最新的4.2.6(本文寫作的時候最新版是4.2.6):
nvm use 4.2
切換到iojs:
nvm use iojs-v3.2.0
切換到最新版:
nvm use node
每次執行切換的時候,系統都會把node
的可執行文件鏈接放到特定版本的文件上。
我們還可以用nvm給不同的版本號設置別名(注意這裏是給版本號設置別名,不是給不同版本的Node實例設置別名——譯者注):
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
上面綠色箭頭是當前正在使用的版本,下面列出的還有設置過的別名。
在每個項目中使用不同版本
我們可以通過創建項目目錄中的.nvmrc文件
來指定要使用的Node版本。之後在項目目錄中執行nvm use
即可。.nvmrc
文件內容只需要遵守上文提到的語義化版本規則即可。另外還有個工具叫做avn,可以自動化這個過程。
其他命令
直接運行特定版本的Node
nvm run 4.2.2 --version
在當前終端的子進程中運行特定版本的Node
nvm exec 4.2.2 node --version
確認某個版本Node的路徑
nvm which 4.2.2
原文信息
原文鏈接:http://www.sitepoint.com/quick-tip-multiple-versions-node-nvm/
原文作者: Bruno Mota
原文發佈日期:2016年3月14日
翻譯時間:2016年4月4日
原作者簡介:精通JS,7年Web從業經驗。主要貢獻開源項目有Relax,一個基於JS的CMS系統。
本翻譯轉載請註明出處:風虎技術博客