node.js愈來愈熱,應用的場景也愈來愈多。node
但也由於是開源軟件,因此具有大多數開源軟件都存在的「版本問題」,版本發展很快,版本先後差別性大,老系統用新版本node跑不過,全局安裝的第三方組件和node版本相關形成全局版本混亂。linux
nvm是解決這一問題的利器。git
nvm是node版本管理工具,主要特色:github
1.可安裝多版本的node。express
2.靈活切換當前的node版本。npm
3.以沙箱方式全局安裝第三方組件到對應版本的node中。bash
4.經過.vnmrc文件,方便靈活地指定各應用系統所需的node版本進行運行。服務器
惋惜目前只支持linux,OS系統。app
接下來,就見證一下它的能力。 curl
安裝nvm
經過下面的命令可進行一步到位的安裝,下面兩種方式可二選一。
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash
或者:
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.31.2/install.sh | bash
安裝完後,驗證安裝
command -v nvm
默認會在「/home/我的帳戶」目錄下會生成.nvm的隱藏目錄,全部的node會以沙箱的方式裝到該目錄下。
安裝完成。
詳細可參考官方:https://github.com/creationix/nvm
安裝多版本node
在命令行中運行命令,安裝當前最新的穩定版。
nvm install stable
當前最新的穩定版是6.3.0。
運行命令,指明版本,安裝早期的版本0.12.4。
nvm install 0.12.4
安裝後,當前使用的node版本默認爲最後一次安裝的版本,在命令行中運行命令可查看當前版本。
nvm current
切換node版本
運行命令切換。
nvm use 6
顯示全部安裝的版本
運行命令,列出全部版本。
nvm ls
左邊有箭頭的表明當前使用中的版本。
安裝全局組件
非nvm管理的狀況下,全局組件是安裝到/usr/local/lib/node_modules下,而後經過軟鏈接的方式把包中bin目錄下的可執行文件連接到/usr/local/bin。無論用什麼版本都裝到這些目錄下,多版本就無法玩了。
在nvm管理下,以沙箱的方式,全局組件會裝到.nvm目錄的當前版本node下,也就是裝在nvm這個沙箱裏,跟在指定版本的node下,當前有什麼版本的node,就有對應的全局組件。這是nvm強大的地方,在多運行環境的管理和切換極爲好用。
下面,運行命令在當前6.3.0的node版本下以全局的方式安裝express生成器。
npm install -g express-generator
express -V
能夠清楚的看到express生成器被安裝到了當前版本的node目錄下。
express默認用的是最新的版本,這裏是4.13.4。
如今,切換到0.12.4版本
nvm use 0
而後,全局安裝express生成器3.0版。
npm install -g express-generator@3
也能夠清楚的看到express生成器裝到了0.12.4版node目錄下,裝完後express版本是3.0.0。
能夠再將node版本切換到6,那麼當前的express版本又會切換成對應的版本。
很方便,很強大。
使用.nvmrc文件運行
在服務器上不少時候會運行多個應用系統,每一個應用系統使用的node版本是不同的,老系統用0.12.x甚至0.10.x,新系統用了新特新因此用最新的node版本,都很實際很正常。
爲了讓不一樣的應用系統使用各自所需的node版本運行,咱們只需在各應用系統內的根目錄裏生成一個.nvmrc文件,在其內寫一個版本號,利用nvm run <系統啓動文件>的方式運行系統,便可完成要求。
作個實驗。
建個demo的文件夾,在其下寫一個app1.js文件,其內容爲:
console.log(process.versions);
只有一行代碼,把當前運行的node版本輸出到控制檯。
與app1.js同級,寫一個.nvmrc文件,其中的版本號寫「0」,目的是要在0.12.4版本下運行,能夠用命令:
echo '0' > .nvmrc
咱們將當前的node版本切至6,而後運行:
nvm use 6
nvm run app1.js
運行效果:
能夠看到運行demo的node版本取決於.nvmrc中寫的版本。
經過.nvmrc做爲運行版本配置,用nvm run命令進行啓動的方式能夠方便的完成同一個服務器運行多個不一樣版本的應用系統,很是方便靈活。