使用nvm和avn自动切换不同的Node.js版本
我们做前端项目的时候经常会遇到使用Node什么版本的问题,比如维护一个旧项目,可能需要使用Node v4.x.x,但是我电脑安装的是Node v6.x.x,怎么办?这时我们首先要安装nvm来管理多个版本的Node。安装如下:
一、卸载已安装到全局的 node/npm
如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中node 命令在 /usr/local/bin/node ,npm路径在/usr/local/bin/npm。nvm并不依赖node是独立的程序安装包,用于管理node版本,属于node之上,且nvm安装的node路径和node安装包安装的路径不一样,因此安装 nvm 之前最好先删除下已安装的 node 和全局 node 模块:
npm ls -g --depth=0 #查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
sudo rm -rf /usr/local/lib/node_modules #删除全局node_modules 目录
sudo rm /usr/local/bin/node #删除node
cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm #删除全局 node 模块注册的软链
二、安装 nvm
curl -o- curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
添加环境变量在shell配置文件中(~/.bash_profile, ~/.zshrc, ~/.profile, or ~/.bashrc)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
重启shell配置
source ~/.bashrc #其他shell配置自行修改
nvm安装完毕。常用命令:
- nvm install <version> #安装node版本
- nvm uninstall <version> #卸载node版本
- nvm use <version> #切换node版本
- nvm ls #列出所有本地node版本
- nvm ls-remote # 列出所有远程服务器的版本
- nvm current # 显示当前的版本
更多查看官方文档
三、使用avn自动切换Node
npm install -g avn avn-nvm avn-n
avn setup
然后只要在项目根目录下创建一个.node-version文件,并且以semver的格式来申明所需要的 Node 的版本号,如:8.1.2。接着,当进入到项目目录中的时候,avn 就会自动帮你切换到指定的 Node 版本。非常方便!
四、nvm与n比较
谈到node版本管理工具就不得不讨论TJ大神的n工具,同样很方便管理node版本切换,但是与nvm不同的是n及基于node的包,版本切换原理与node略有不同,n与node的先后顺序是,node=>n=>node,n切换过程的把不同版本的node在下载好的本地文件直接拷贝替换之前的node文件,也就是node的路径与官方安装包的一致,因为没有修改环境变量路径的node路径,所以全局安装的node_module在版本切换后无需重新安装,但是这样也可能存在版本兼容问题。而nvm安装的node由于各个版本路径不同,因此全局安装的node_module在切换版本后只能重新安装。
综合nvm与n的优缺点可以根据具体需求选择安装,并没有谁优谁劣之分。如果你用的mac是128G小硬盘并且只是偶尔切换node某一个版本调试代码,那我建议安装n,它的优势就是全局node_module只需安装一次,占用更少的硬盘可以实现需要的功能。如果是需要维护大量的历史项目,必须兼容node v0.x.x--v8.x.x之间很多版本项目,那必须安装nvm,否则使用n将给你带来噩梦。