天天看點

使用nvm管理不同版本的node與npm

前言:

日常開發中,手上有好幾個項目,每個項目的需求不同,進而不同項目必須依賴不同版本不同版的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

     相關的檔案和檔案夾
  • 如果你是使用的 

    brew install node

     安裝的 NodeJS,那麼你還需要在終端中執行 

    brew uninstall node

     指令來解除安裝
  • 檢查你的個人主檔案夾下面的所有的 

    local

    lib

     以及 

    include

     檔案夾,并且删除所有與 

    node

     和 

    node_modules

     相關的檔案以及檔案夾
  • 打開 

    /usr/local/bin

     并删除 

    node

     可執行檔案

你可能還需要在你的終端中輸入一些額外的指令:

1
      
      
       2
      
      
       3
      
      
       4
      
      
       5
      
      
       6
      
      
       7
      
      
       8
            
sudo rm /usr/local/bin/npm
      
      
       sudo rm /usr/local/share/man/man1/node.1
      
      
       sudo rm /usr/local/lib/dtrace/node.d
      
      
       sudo rm -rf ~/.npm
      
      
       sudo rm -rf ~/.node-gyp
      
      
       sudo rm /opt/local/bin/node
      
      
       sudo rm /opt/local/include/node
      
      
       sudo rm -rf /opt/local/lib/node_modules
            

Windows安裝

首先最重要的是:一定要解除安裝已安裝的 NodeJS,否則會發生沖突。然後下載下傳  nvm-windows  最新安裝包,直接安裝即可。

OSX/Linux安裝

與 Windows 不同,我們并不一定要先解除安裝原有的 NodeJS。當然我們推薦還是先解除安裝掉比較好。另外,你還需要 C++ 編譯器,Linux 發行版一般不用擔心,像 Ubuntu 都可以直接用 

build-essential

 套件,OS X 的話,可以用 

X-Code

 的指令行工具。運作這個指令即可:

1
             
xcode-select --install
             

在 Linux 中:(如果是 Debian 發行版)

1
            
sudo apt-get install build-essential
            

然後我們可以使用

1
            
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
            

或者

1
            
wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
            

從遠端下載下傳 

install.sh

 腳本并執行。注意這個版本年數字 

v0.33.0

 會随着項目開發而變化。随時通過官方最新安裝指令來檢查最新安裝版本是有好處的。

安裝多版本node/npm

例如,我們要安裝4.2.2版本,可以用如下指令:

1
            
nvm install 4.2.2
            

nvm 遵守語義化版本命名規則。例如,你想安裝最新的 

4.2

 系列的最新的一個版本的話,可以運作:

1
            
nvm install 4.2
            

nvm 會尋找 

4.2.x

 中最高的版本來安裝。

你可以通過以下指令來列出遠端伺服器上所有的可用版本:

1
            
nvm ls-remote
            

Windows 的話,就是:

1
            
nvm ls available
            

在不同版本間切換

每當我們安裝了一個新版本 Node 後,全局環境會自動把這個新版本設定為預設。

nvm 提供了 

nvm use

 指令。這個指令的使用方法和 

install

 指令類似。

例如,切換到 

4.2.2

1
            
nvm use 4.2.2
            

切換到最新的 `4.2.x``:

1
            
nvm use 4.2
            

切換到 iojs:

1
            
nvm use iojs-v3.2.0
            

切換到最新版:

1
            
nvm use node
            

每次執行切換的時候,系統都會把 node 的可執行檔案連結放到特定版本的檔案上。

我們還可以用 nvm 給不同的版本号設定别名:

1
            
nvm alias awesome-version 4.2.2
            

我們給 

4.2.2

 這個版本号起了一個名字叫做 

awesome-version

,然後我們可以運作:

1
            
nvm use awesome-version
            

下面這個指令可以取消别名:

1
            
nvm unalias awesome-version
            

另外,你還可以設定 

default

 這個特殊别名:

1
            
nvm alias default node
            

列出已安裝執行個體

1
            
nvm ls
            
使用nvm管理不同版本的node與npm

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:

1
            
nvm install v5.0.0 --reinstall-packages-from=4.2
            

其他指令

直接運作特定版本的 Node

1
            
nvm run 4.2.2 --version
            

在目前終端的子程序中運作特定版本的 Node

1
            
nvm exec 4.2.2 node --version
            

确認某個版本Node的路徑

1
            
nvm which 4.2.2
            

安裝 Node 的其他實作,例如 iojs(一個基于 ES6 的 Node 實作,現在已經和 Node 合并)

1
            
nvm install iojs-v3.2.0
            

快捷指令:

  • nvm install node

     安裝最新版 Node
  • nvm install iojs

     安裝最新版 iojs
  • nvm install unstable

     安裝最新不穩定版本的 Node

繼續閱讀