## NodeJs的版本管理
[TOC]
### 为什么要做版本控制
`node`的版本发布遵循[语义化版本控制](http://www.tuicool.com/articles/JnmuE3R)的规则,这里简要描述一下我们需要关注的点
>版本号一共是3位
其格式为:MAJOR.MINOR.PATCH ,点号是分隔符,
MAJOR。进行了不兼容的API改动
MINOR。添加了向后兼容的新特性
PATCH。进行了向后兼容的bug修复
一般,下面3种情况,需要用到版本管理
1.`node`的版本现在有`0.x.x,4.x.x,5.x.x,6.x.x,7.x.x`,这几个大版本就是MAJOR这个版本号做了修改,说明它们的API不完全兼容,假如你下载的一个非常重要的第三方模块和你当前的开发环境出现node版本兼容性问题(比如,第三方模块用`6.x.x`,而你用的是`5.x.x`),你就需要用版本管理工具切换到第三方模块使用的版本。
2.你需要用到一个功能,但是,你电脑上安装的`node`环境太老了,不支持该功能,这时,你就需要更新`node`版本。
3.在当前`node`环境遇到某一个原生模块的bug并且这个bug新发布的模块已经解决了。
### 版本管理工具的使用
#### Windows系统
`Windows`系统下,这里推荐使用`nodist`,这里简单介绍下`nodist`的下载和使用
* [下载nodist](https://github.com/marcelklehr/nodist/releases);
* 下载完成之后,可视化安装`nodist`
* 安装完成之后就可以开始使用`nodist`做版本管理了。
下面将介绍`nodist`的使用,这里将介绍`nodist`的常用命令,有兴趣进一步了解`nodist`的朋友,可自行[查阅官网](https://github.com/marcelklehr/nodist)
* 打印`node`列表
~~~
$ nodist
#打印当前所有已安装到电脑所有node版本,高亮
~~~
~~~
$ nodist dist
#打印所有可下载的node版本
~~~
* 切换node版本
~~~
$ nodist global 4.x
#设置全局的node使用4.x版本(4.x为你想切换的版本号,下同)
#这个命令和你直接使用nodist 4.x效果一样,也是用得最多的命令
~~~
~~~
$ nodist local 4.x
#设置在当前文件目录下,node使用4.x版本,不影响全局环境变量
~~~
~~~
$ nodist env 4.x
#设置在当前命令行环境下,node使用4.x版本,不影响全局环境变量
~~~
* 切换npm版本
~~~
$ nodist npm global 3.x
#设置全局的npm使用4.x版本(4.x为你想切换的版本号,下同)
$ nodist npm global match
#开启nodist自动匹配模式,总是选择和当前环境node版本相匹配的npm版本
~~~
~~~
$ nodist npm local 2.x
#设置在当前文件目录下,npm使用2.x版本,不影响全局环境变量
~~~
~~~
$ nodist npm env 2.x
#设置在当前命令行环境下,npm使用4.x版本,不影响全局环境变量
~~~
* 其他操作
~~~
$ nodist + 4.x
# 先检查4.x版本是否存在,如果不存在则按安装
$ nodist + all
# 安装所有模块
~~~
~~~
$ nodist - 4.1.1
# 删除node 4.1.1版本
~~~
~~~
$ nodist --help
# 显示完整的nodist命令提示
~~~
#### OSX系统(Mac)
OSX系统下,我们使用`n`,这个模块非常简单,功能却非常强大
* 安装
~~~
$ sudo npm install n -g
#使用管理员权限全局安装,一般需要你输入管理员密码确认安装
~~~
` n`的使用
这里只介绍几个经常常用,更多细节请[查阅官网](https://github.com/tj/n)
* 打印`node`版本
~~~
$ n
#打印所有已下载的node版本,并高亮当前使用的node版本
~~~
~~~
$ n ls
#打印所有可下载的node版本,并高亮所有已下载版本,标记当前使用版本
~~~
~~~
$ n --latest
#打印最新发布的node版本号
~~~
~~~
$ n --stable
#打印最新发布的node稳定版版本号
~~~
* 切换node版本(使用管理员权限切换到相应的模块)
~~~
$ sudo n latest
#安装并切换或直接切换到最新发布的node版本
~~~
~~~
$ sudo n stable
#安装并切换或直接切换到最新发布的node 稳定版本
~~~
~~~
$ sudo n <version>
#安装指定node版本
~~~