管理 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。

你若是要问,楼主最终选用了谁?我会说,我选择了更流行的那一个。

相关文章
相关标签/搜索