管理 node 版本,選擇 nvm 仍是 n?

來源:http://taobaofed.org/blog/2015/11/17/nvm-or-n/node

 

引子

我本機安裝着 nvm,而 node 原本一直運行在 0.x 的老版本上。後來爲了跑 ES6,我將 node 切換到 4.x 的版本,而且把老版本給刪掉了。git

而後我就碰到了兩個問題。一是 WebStorm 報錯說找不到 node 解釋器了。我只好去設置裏面從新設置一番解釋器的路徑:github

WebStorm 的 node 設置

在個人記憶中,WebStorm 默認不須要設置 node 路徑,它會去找 /usr/local/bin,即一般的 node 命令位置。而一旦使用 nvm 來安裝和管理 node,甚至頻繁切換的話,咱們就得 手動地 指定 node 路徑。shell

並且是如此硬編碼的路徑(硬編碼了版本號),真不優雅……npm

第二個問題是,我曾經在全局安裝的各類 node 模塊們全都須要從新安裝,由於全局模塊被安裝在每一個 node 版本本身的沙箱中,所以它們和老版本的 node 一塊兒被埋葬了。bash

事實上,這就是 nvm 的特性,然而喜不喜歡它則是另外一回事兒了。curl

無論如何,因爲發生了這些個問題,我決定稍微深刻了解一下狀況。工具

nvm 和 n

在 node 的版本管理工具中,nvm 天然聲名遠揚,然而咱們也不能忘了來自 TJ 的 n。這兩種,是目前最主流的方案。測試

關於這兩個工具如何安裝和使用,這裏再也不贅言,請見它們各自的主頁:編碼

接下來咱們着重關注一下 nvm 和 n 的運做機制和特性。

n

n 是一個須要全局安裝的 npm package。

 
npm install -g n

這意味着,咱們在使用 n 管理 node 版本前,首先須要一個 node 環境。咱們或者用 Homebrew 來安裝一個 node,或者從官網下載 pkg 來安裝,總之咱們得先本身裝一個 node —— n 自己是無法給你裝的。

而後咱們可使用 n 來安裝不一樣版本的 node。

在安裝的時候,n 會先將指定版本的 node 存儲下來,而後將其複製到咱們熟知的路徑 /usr/local/bin,很是簡單明瞭。固然因爲 n 會操做到非用戶目錄,因此須要加 sudo 來執行命令。

因此這樣看來,n 在其實現上是一個很是易理解的方案。

nvm

咱們再來看 nvm。不一樣於 n,nvm 不是一個 npm package,而是一個獨立軟件包。這意味着咱們須要單獨使用它的安裝邏輯:

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

或者使用 Homebrew 來安裝。安裝完後,還須要修改一下 shell 配置(~/.zshrc or whatever),具體參見官方文檔。

而後咱們可使用 nvm 來安裝不一樣版本的 node。

在安裝的時候,nvm 將不一樣的 node 版本存儲到 ~/.nvm/<version>/ 下,而後修改 $PATH,將指定版本的 node 路徑加入,這樣咱們調用的 node 命令便是使用指定版本的 node。

nvm 顯然比 n 要複雜一些,可是另外一方面,因爲它是一個獨立軟件包,所以它和 node 之間的關係看上去更合乎邏輯:nvm 不依賴 node 環境,是 node 依賴 nvm;而不像 n 那樣產生相似循環依賴的問題。

如何選擇?

這樣看下來,nvm 和 n 的差別仍是比較大的,具體體如今:

  • 安裝簡易度。nvm 安裝起來顯然是要麻煩很多;n 這種安裝方式更符合 node 的慣性思惟。見仁見智吧。
  • 系統支持。注意, nvm 不支持 Windows
  • 對全局模塊的管理。n 對全局模塊毫無做爲,所以有可能在切換了 node 版本後發生全局模塊執行出錯的問題;nvm 的全局模塊存在於各自版本的沙箱中,切換版本後須要從新安裝,不一樣版本間也不存在任何衝突。
  • 關於 node 路徑。n 是萬年不變的 /usr/local/bin;nvm 須要手動指定路徑。

因此,如何選擇?真心見仁見智了,不過這裏能夠給出大致的建議:

  1. 若是你使用 Windows,那沒得選了,使用 n,或者換一臺 Mac。
  2. 若是你會頻繁切換 node 版本(好比本地常常測試最新版的特性,同時又要兼顧代碼在生產環境的兼容性),那麼從全局模塊兼容性的角度考慮,只能使用 nvm。
  3. 若是你是一個輕量級的用戶,不須要擔憂兼容性的問題,更關心 node 安裝和使用上的體驗,那麼選擇 n。

你若是要問,樓主最終選用了誰?我會說,我選擇了更流行的那一個。

相關文章
相關標籤/搜索