本篇内容是在Mac OS X环境下实践的。
NVM的安装和使用
卸载原有的Node.js
之前没有在电脑里安装过Node.js且没有强迫症的可以跳过
- node 命令在 /usr/local/bin/node ,npm 命令在全局 node_modules 目录中,具体路径为
/usr/local/lib/node_modules/npm
- 先通过
npm ls -g --depth=0
查看已经安装在全局的npm包(之后才知道要装哪些回去) sudo rm -rf /usr/local/lib/node_modules
删除全局 node_modules 目录sudo rm /usr/local/bin/node
删除 nodecd /usr/local/bin && ls -l | grep "../lib/node_modules/" | awk '{print $9}'| xargs rm
删除全局 node 模块注册的软链
安装NVM
- 官网是最好的安装教程,包括什么command not found上面都写的清楚了
在
~/.bash_profile
文件中中添加代码来指定nvm源(天朝特色)1
2nvm
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/nodenode也可以修改源
1
2
3
4registry是npm依赖包的url
npm config set registry https://registry.npm.taobao.org --global
disturl(很多人不知道这是什么)是node版本的地址——通过nvm去下载node版本的时候需要的
npm config set disturl https://npm.taobao.org/dist --global
使用NVM
nvm --help
可以很直观的看到命令,另外,在输入命令的时候多用tab也可以很容易的从补全提示中得到答案。- 第一个安装的node版本会先被设为default。通过命令
npm alias default <version>
就可以修改default版本。 - 更可以通过
nvm alias default node
来确保所有的Shell都优先使用default版本 - 设置default的意义:你新开的窗口将会是default指定版本的Node.js环境,所以有必要将之设置为lts的版本,额外需要切的特殊情况手动切。
nvm install --lts
会自动安装官网上的lts版本,否则就是nvm install <version>
version是如:”v8.10.0“这样的写法,但其实是支持模糊输入的nvm install stable
也可以直接安装稳定版本- 在IDE或者编辑器里的Shell窗口,有时候需要你“关闭”或者“删除”他们之后,重新打开,NVM的配置才会生效。
- 常用命令:
nvm use x.y.z
,可以尝试简写nvm use x
,如果你本地某个大版本只有一个,就能直接切过去。
.nvmrc文件的使用
- 一般我们通过
nvm use x.y.z
来切换版本,但是对版本有要求的项目,并不需要特别去记。只需要在项目根目录下新建.nvmrc
文件,写上版本号——只需要写版本号x.y.z
即可,在项目目录下运行nvm use
即会自动切换版本。当然,前提是你事先配置过环境,nvm管理下有那个版本。 .nvmrc
文件可以手动创建,也可以很简单的一行命令搞定:node -v > .nvmrc
- 配合一些其他手段,甚至可以做到进入目录之后自动根据nvmrc文件切换node版本
NRM
管理npm源
- 有的时候,镜像可能有同步问题、访问速度问题,所以会有切换的需求,和ruby的gem一样,有时候需要切到国内的淘宝镜像。
- 值得一提的是还可以用它来切官方源和公司的私有npm源。
安装并且使用NRM
npm i nrm -g
他是通过npm来安装的…nrm ls
列出可以切换的源,目前nrm支持在npm、cnpm、strongloop、european、australia、nodejitsu、taobao来回切。nrm use <registry>
根据上面列出的源,可以通过名字进行切换。nrm add <registry> <url> [home]
可以增加定制的源——特别适用于企业内部私有源。nrm del <registry>
删除某个源nrm test [registry]
测速
NVM和N的对比
本节大量参考了该文章
- 二者都是node的版本管理工具,但是原理和特点不太一样
- NVM
- git官网
- nvm 不是一个 npm package,而是一个独立软件包。这意味着我们需要单独使用它的安装逻辑。
- nvm 将不同的 node 版本存储到
~/.nvm/<version>/
下,然后修改$PATH
,将指定版本的 node 路径加入,我们调用的 node 命令才是使用指定版本的 node - nvm 不依赖 node 环境,是 node 依赖 nvm
- nvm 的全局模块存在于各自版本的沙箱中,切换版本后需要重新安装,不同版本间也不存在任何冲突
- 对于一些IDE,比如webstorm,有时需要用户手动地指定 node 路径,略尴尬
- 如果需要频繁切换 node 版本(比如本地经常测试最新版的特性,同时又要兼顾代码在生产环境的兼容性),那么从全局模块兼容性的角度考虑,只能使用 nvm
- N
- git官网
- 非常小巧,非常简单,适合已经有node环境的、用来当临时的解决方案,或者轻量级的node版本切换的需求
- 一个需要全局安装的 npm package!由于 n 会操作到非用户目录,所以需要加 sudo 来执行命令,另外,着看起来仿佛会产生类似循环依赖的问题
- 安装的时候,n 会先将指定版本的 node 存储下来,然后将其复制到我们熟知的路径 /usr/local/bin,非常简单明了
- 对全局模块的管理。n 对全局模块毫无作为,当使用 n 切换不同的 node 版本时,实际上会共用全局的 node/npm 目录。因此有可能在切换了 node 版本后发生全局模块执行出错的问题
- 关于 node 路径。n 是万年不变的 /usr/local/bin
- 很久没更新了。我用NVM。