译者导读
如果使用过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
– 安装最新版Nodeiojs
– 安装最新版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系统。
本翻译转载请注明出处:风虎技术博客