使用nvm讓不同版本的Node.js共存

譯者導讀

如果使用過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 – 安裝最新版Node

  • iojs – 安裝最新版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系統。

本翻譯轉載請註明出處:風虎技術博客


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章