在我们的日常开发中,手上有好几个项目,每个项目的需求不同,如果不同项目必须依赖不同版的 NodeJS 运行环境,这个问题将非常棘手,如果有个 NodeJS 版本管理工具就好了。
nvm 应运而生,nvm 是 Mac 下的 NodeJS 管理工具,有点类似管理 Ruby 的 rvm,如果需要管理 Windows 下的 node,官方推荐使用 nvmw 或 nvm-windows(是使用go语言编写的软件)。不过,nvm-windows 并不是 nvm 的简单移植,他们也没有任何关系。但下面介绍的所有命令,都可以在 nvm-windows 中运行。
NVM 安装
Windows 安装
下载地址:https://github.com/coreybutler/nvm-windows/releases
文件说明:
- nvm-noinstall.zip: 这个是绿色免安装版本,但是使用之前需要配置
- nvm-setup.zip:这是一个安装包,下载之后点击安装,无需配置就可以使用,方便。
- Source code(zip):zip压缩的源码
- Sourc code(tar.gz):tar.gz的源码,一般用于*nix系统
我们直接选择nvm-set.zip文件下载即可。
解压nvm-set.zip,双击运行nvm-setup.exe,根据提示安装即可。
提示:
- 如果已经安装过 Nodejs,可以不用卸载,安装nvm的时候会提示让你选择的
- 建议关掉电脑上的安全软件,并使用管理员权限运行.exe文件
命令行输入 nvm version
, 提示了版本信息说明安装成功了。
1 | $ nvm version |
OS X/Linux 安装
Ubuntu 都可以直接用 build-essential
套件,OS X 的话,可以用 X-Code
的命令行工具。运行这个命令即可:
1 | xcode-select --install |
在 Linux 中:(如果是 Debian 发行版)
1 | sudo apt-get install build-essential |
然后我们可以使用
1 | curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash |
或者
1 | wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash |
从远程下载 install.sh
脚本并执行。注意这个版本年数字 v0.33.0
会随着项目开发而变化。随时通过官方最新安装命令来检查最新安装版本是有好处的。
Linux 安装(最新)
1.nvm国内镜像设置
bash中输入:
1 | export NVM_NODEJS_ORG_MIRROR=http://npm.taobao.org/mirrors/node |
2.下载nvm脚本
1 | cd /opt |
3.给.bashrc 添加自启环境
1 | sudo vim .bashrc |
4.安装node版本
1 | nvm install 14 |
5.设置npm国内代理
1 | npm config set registry https://registry.npm.taobao.org/ |
安装多版本 node/npm
例如,我们要安装4.2.2版本,可以用如下命令:
1 | nvm install 4.2.2 |
nvm 遵守语义化版本命名规则。例如,你想安装最新的 4.2
系列的最新的一个版本的话,可以运行:
1 | nvm install 4.2 |
nvm 会寻找 4.2.x
中最高的版本来安装。
你可以通过以下命令来列出远程服务器上所有的可用版本:
1 | nvm ls-remote |
Windows 的话,就是:
1 | nvm ls available |
在不同版本间切换
每当我们安装了一个新版本 Node 后,全局环境会自动把这个新版本设置为默认。
nvm 提供了 nvm use
命令。这个命令的使用方法和 install
命令类似。
例如,切换到 4.2.2
:
1 | nvm use 4.2.2 |
切换到最新的 4.2.x
:
1 | nvm use 4.2 |
切换到 iojs:
1 | nvm use iojs-v3.2.0 |
切换到最新版:
1 | nvm use node |
每次执行切换的时候,系统都会把 node 的可执行文件链接放到特定版本的文件上。
我们还可以用 nvm 给不同的版本号设置别名:
1 | nvm alias awesome-version 4.2.2 |
我们给 4.2.2
这个版本号起了一个名字叫做 awesome-version
,然后我们可以运行:
1 | nvm use awesome-version |
下面这个命令可以取消别名:
1 | nvm unalias awesome-version |
另外,你还可以设置 default
这个特殊别名:
1 | nvm alias default node |
列出已安装实例
1 | $ nvm ls |
在项目中使用不同版本的 Node
我们可以通过创建项目目录中的 .nvmrc
文件来指定要使用的 Node 版本。之后在项目目录中执行 nvm use
即可。.nvmrc
文件内容只需要遵守上文提到的语义化版本规则即可。另外还有个工具叫做 avn,可以自动化这个过程。
在多环境中,npm该如何使用呢?
每个版本的 Node 都会自带一个不同版本的 npm,可以用 npm -v
来查看 npm 的版本。全局安装的 npm 包并不会在不同的 Node 环境中共享,因为这会引起兼容问题。它们被放在了不同版本的目录下,例如 ~/.nvm/versions/node/<version>/lib/node_modules</version>
这样的目录。这刚好也省去我们在 Linux 中使用 sudo
的功夫了。因为这是用户的主文件夹,并不会引起权限问题。
但问题来了,我们安装过的 npm 包,都要重新再装一次?幸运的是,我们有个办法来解决我们的问题,运行下面这个命令,可以从特定版本导入到我们将要安装的新版本 Node:
1 | nvm install v5.0.0 --reinstall-packages-from=4.2 |
其他命令
直接运行特定版本的 Node
1 | nvm run 4.2.2 --version |
在当前终端的子进程中运行特定版本的 Node
1 | nvm exec 4.2.2 node --version |
确认某个版本Node的路径
1 | nvm which 4.2.2 |
安装 Node 的其他实现,例如 iojs(一个基于 ES6 的 Node 实现,现在已经和 Node 合并)
1 | nvm install iojs-v3.2.0 |
快捷命令:
- nvm install node 安装最新版 Node
- nvm install iojs 安装最新版 iojs
- nvm install unstable 安装最新不稳定版本的 Node
nvm 使用命令
nvm arch [32|64]
: 显示node是运行在32位还是64位模式。指定32或64来覆盖默认体系结构。nvm install <version> [arch]
: 该可以是node.js版本或最新稳定版本latest。(可选[arch])指定安装32位或64位版本(默认为系统arch)。设置[arch]为all以安装32和64位版本。在命令后面添加–insecure ,可以绕过远端下载服务器的SSL验证。nvm list [available]
: 列出已经安装的node.js版本。可选的available,显示可下载版本的部分列表。这个命令可以简写为nvm ls [available]。nvm on
: 启用node.js版本管理。nvm off
: 禁用node.js版本管理(不卸载任何东西)nvm proxy [url]
: 设置用于下载的代理。留[url]空白,以查看当前的代理。设置[url]为none删除代理。nvm node_mirror [url]
:设置node镜像,默认为https://nodejs.org/dist/.。我建议设置为淘宝的镜像https://npm.taobao.org/mirrors/node/nvm npm_mirror [url]
:设置npm镜像,默认为https://github.com/npm/npm/archive/。我建议设置为淘宝的镜像https://npm.taobao.org/mirrors/npm/nvm uninstall <version>
: 卸载指定版本的nodejs。nvm use [version] [arch]
: 切换到使用指定的nodejs版本。可以指定32/64位[arch]。nvm use将继续使用所选版本,但根据提供的值切换到32/64位模式的 nvm root [path]
: 设置 nvm 存储node.js不同版本的目录 ,如果未设置,将使用当前目录。nvm version
: 显示当前运行的nvm版本,可以简写为nvm v
解决 npm command not found 问题
经过一系列的研究,发现8.11以上版本的node版本对应的npm都没法自动安装,对应的版本目录下没有npm运行文件,这里需要我们手动下载。
- 查看nodejs版本对应的npm版本https://nodejs.org/zh-cn/download/releases/
- 登录npm淘宝官网https://npm.taobao.org/mirrors/npm/
- 下载对应的npm版本
- 解压后的文件夹重命名为
npm
并复制到 node_modules 目录下 - 将 npm 中 bin 目录下的 npm、和npm.cmd 复制到 node_modules 目录同级目录下(如果有npx、和npx.cmd一块复制)
最终的目录结构为
1 | ─nvm |
选择node版本执行npm -v
试试看
1 | nvm use xx.xx.xx |