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命令进行启动的方式能够方便的完成同一个服务器运行多个不一样版本的应用系统,很是方便灵活。