liveKang/Blog

Node版本管理工具-NVM

Opened this issue · 0 comments

Node版本管理工具-NVM

之前一直使用的NodeJs稳定版本(6~),没毛病都挺正常的,node_modules目录也比较清晰,后来学习ES6,7时,想在node环境下测试下ES6,7新特性,发现只能在最新的Current版本里面,开启harmony模式,于是就升级了node版本(7~)。

然后就在项目上遇到了node模块上的问题,node-sass这个一般都是要重新安装的,还有其他的一些问题。我推断时由于node版本引起的,而且在安装最新版本current的node之后,npm install的node_modules目录安装了很多其他的模块上来,目录结构没有稳定版本清晰。基于以上两点,试试node版本管理工具nvm,发现真的很好用,好东西分享下。

nvm 是 Mac 下的 node 管理工具,有点类似管理 Ruby 的 rvm,如果是需要管理 Windows 下的 node,官方推荐是使用 nvmwnvm-windows

以下具体说下 Mac 系统中的安装与使用细节(Windows 系统仅供类比参考)。

(一) 卸载安装到全局的 node/npm

之前的很多模块,诸如gulp,cordova,ionic等等,都是安装在全局目录下,现在需要管理node版本,自然也就需要重新安装对应node版本下的全局模块。

node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为 /usr/local/lib/node_modules/npm

安装nvm之前,先删除已安装的node和全局node模块:

npm ls -g --depth=0 #查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
sudo rm -rf /usr/local/lib/node_modules #删除全局 node_modules 目录
sudo rm -rf /usr/local/bin/node #删除 node
cd  /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm #删除全局 node 模块注册的软链

(二) 安装nvm

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.1/install.sh | bash

安装完成后请重新打开终端环境,Mac下推荐使用oh-my-zsh代替默认的 bash shell。

curl 完成后nvm就被安装在了~/.nvm下了,接下来就需要配一下环境变量了,如果你也使用了zsh的话,就需要在~/.zshrc这个配置文件中配置,否则就找找看~/.bash_profile或者~/.profile

输入nano .zshrc打开~/.zshrc,在最后一行加上:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

测试:终端输入nvm,有Node Version Manager等一大段出现就对了。

(三) 安装切换各版本 node/npm

nvm install stable #安装最新稳定版 node,现在是 6.10.0
nvm install 7.7.2 #安装 7.7.2 版本

# 特别说明:以下模块安装仅供演示说明,并非必须安装模块
nvm use 7 #切换至 7.7.2 版本
npm install -g webpack #安装 webpack 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v7.7.2/lib/webpack
nvm use 6 #切换至 6.10.0 版本
npm install -g react-native-cli #安装 react-native-cli 模块至全局目录,安装完成的路径是 /Users/<你的用户名>/.nvm/versions/node/v6.10.0/lib/react-native-cli

nvm alias default 6.10.0 #设置默认 node 版本为 6.10.0

(四) 使用 .nvmrc 文件配置项目所使用的 node 版本

如果你的默认 node 版本(通过 nvm alias 命令设置的)与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc 文件,在文件中指定使用的 node 版本号,例如:

cd <项目根目录>  #进入项目根目录
echo 6 > .nvmrc #添加 .nvmrc 文件
nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
node -v #查看 node 是否切换为对应版本

哈哈哈,SO EASY!

(附录)参考资料