nvm 教程
目前主流的 node 版本管理工具有两种,nvm
和 n
。
nvm 有点类似于 Python 的 virtualenv 或者 Ruby 的 rvm,每个 node 版本的模块都会被安装在各自版本的沙箱里面(因此切换版本后模块需重新安装),因此考虑到需要时常对 node 版本进行切换测试兼容性和一些模块对 node 版本的限制,我选择了使用 nvm 作为管理工具,下面就来说说 nvm 的安装和使用过程。
npm : https://www.npmjs.com/package/nvm
安装
这里主要介绍 mac 的安装 (linux 可以参照),
windows 系统的话可以参考 https://github.com/coreybutler/nvm-windows
推荐的安装方法
卸载已安装到全局的 node/npm
如果之前是在官网下载的 node 安装包,运行后会自动安装在全局目录,其中
- node 命令在
/usr/local/bin/node
, - npm 命令在全局
node_modules
目录中,具体路径为/usr/local/lib/node_modules/npm
安装 nvm 之后最好先删除下已安装的 node 和全局 node 模块:
#查看已经安装在全局的模块,以便删除这些全局模块后再按照不同的 node 版本重新进行全局安装
npm ls -g --depth=0
#删除全局 node_modules 目录
sudo rm -rf /usr/local/lib/node_modules
#删除 node
sudo rm /usr/local/bin/node
#删除全局 node 模块注册的软链
cd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm
安装 nvm
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.32.1/install.sh | bash
安装完成后请重新打开终端环境,Mac 下推荐使用 oh-my-zsh 代替默认的 bash shell。
安装完成后,发现使用 nvm install stable 安装 node 速度很慢,大概大家都知道我大天朝的国情。
接下来介绍如何使用国内镜像快速安装 node:
把环境变量 NVM_NODEJS_ORG_MIRROR
, 那么我建议你加入到 .bash_profile
文件中:
# nvm
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
然后你可以继续非常方便地安装各个版本的 node 了,你可以查看一下你当前已经安装的版本:
$ nvm ls
nvm
v0.8.26
v0.10.26
v0.11.11
-> v4.3.2
使用 cnpm 加速 npm
同理 nvm , npm 默认是从国外的源获取和下载包信息,不慢才奇怪。
可以通过简单的 —registry 参数,使用国内的镜像 https://registry.npm.taobao.org
$ npm --registry=https://registry.npm.taobao.org install koa
于是屏幕又哗啦哗啦地一大片输出:
$ npm --registry=https://registry.npm.taobao.org install koa
npm http GET https://registry.npm.taobao.org/koa
npm http 200 https://registry.npm.taobao.org/koa
...
npm http 200 https://registry.npm.taobao.org/negotiator
npm http 200 https://registry.npm.taobao.org/keygrip
koa[@0](/user/0).5.2 node_modules/koa
├── koa-compose[@2](/user/2).2.0
├── statuses[@1](/user/1).0.2
├── finished[@1](/user/1).1.1
├── escape-html[@1](/user/1).0.1
├── only[@0](/user/0).0.2
├── debug[@0](/user/0).8.0
├── fresh[@0](/user/0).2.2
├── type-is[@1](/user/1).0.1
├── delegates[@0](/user/0).0.3
├── mime[@1](/user/1).2.11
├── co[@3](/user/3).0.5
├── accepts[@1](/user/1).0.1 (negotiator[@0](/user/0).4.2)
└── cookies[@0](/user/0).4.0 (keygrip[@1](/user/1).0.0)
但是毕竟镜像跟官方的 npm 源还是会有一个同步时间差异,目前 cnpm 的默认同步时间间隔是 15 分钟。
如果你是模块发布者,或者你想马上同步一个模块,那么推荐你安装 cnpm cli:
$ npm --registry=https://registry.npm.taobao.org install cnpm -g
通过 cnpm 命令行,你可以快速同步任意模块:
$ cnpm sync koa connect mocha
我们还有一个 web 页面:
例如我想马上同步 koa, 直接打开浏览器:https://npm.taobao.org/sync/koa
或者你是命令行控,通过 open 命令打开:
$ open https://npm.taobao.org/sync/koa
如果你安装的模块依赖了 C++ 模块,需要编译,肯定会通过 node-gyp 来编译,
node-gyp 在第一次编译的时候,需要依赖 node 源代码,于是又会去 node dist 下载,
于是大家又会吐槽,怎么 npm 安装这么慢…
好吧,于是又要提到 –disturl 参数,通过七牛的镜像来下载:
$ npm --registry=https://registry.npm.taobao.org --disturl=https://npm.taobao.org/mirrors/node install microtime
再次要提到 cnpm cli, 它已经默认将 –registry 和 –disturl 都配置好了,谁用谁知道
如果不想使用 cnpm cli,可以
npm config set registry https://registry.npm.taobao.org --global
npm config set disturl https://npm.taobao.org/dist --global
不推荐的安装方法
一开始我是使用 homebrew 来安装的,安装命令如下:
brew install nvm
安装完后,为了让你可以直接在 shell 使用 nvm 指令,必须在你的 .bash_profile 加入以下这行(习惯把设定放在。bashrc 的人可以把以下的。bash_profile 改成。bashrc)(注:如果没有这个文件,可以 touch 创建)
source $(brew --prefix nvm)/nvm.sh
或者直接输入以下这行来加入
$ echo "source $(brew --prefix nvm)/nvm.sh" >> .bash_profile
记得重新 source 你的 .bash_profile 来让设定生效
$ . ~/.bash_profile
OK,以上就完成了 nvm 的安裝。
我们来装一下 node v5.12.0
nvm install 5
安装成功后,使用 nvm use 来切换版本
nvm use v5.12.0
如果出现错误,请参照:https://github.com/nvm-sh/nvm/issues/855
参考链接