ECMA
标准不断推出,nodejs
需要不断向标准靠拢,版本迭代很快,新的特性不断加入,所以我们的项目之间可能要使用不同的nodejs
版本,比方说:你可能同时进行两个项目,而不同项目所使用的node
版本是不一样的;又或者你要用更新的版本是做一些实验。这种情况下,如果没有NVM
自己去安装和维护多个版本的node
也是一件比较麻烦的事情。这就是NVM
的价值。
nvm不支持Windows
本文使用环境是linux
,替代解决办法是使用nvm-windows
或者nodist
, 所有命令是一样的,不同的是安装和设置默认下载仓库, nvm-windows
的使用请看这里
安装/升级
script方式
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
或者
wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | bash
Git安装(最低要求的git版本是v1.7.0)
- 将此
repo
克隆在用户的根目录中
cd ~/
git clone https://github.com/creationix/nvm.git .nvm
- 检查最新版本并激活
cd ~/.nvm
git checkout v0.33.6
# 激活nvm
. nvm.sh
- 将一下代码添加到
~/.bashrc, ~/.profile, or ~/.zshrc
, 以便在登录的时候,自动获取nvm
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion
验证安装
# 如果安装成功,应输出“nvm”, nvm 安装完成后,可能要重启一下 shell 才有 nvm 这个命令。
command -v nvm
配置镜像服务器
nvm 默认是从 http://nodejs.org/dist/ 下载的, 国外服务器, 必然很慢,
好在 nvm 以及支持从镜像服务器下载包
# 从淘宝镜像下载node v4的最新版本
NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node nvm install 4
如果你不想每次都输入环境变量 NVM_NODEJS_ORG_MIRROR
, 建议将一下代码加入到 .bashrc
文件中,这样就会自动从淘宝镜像上下载:
export NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node
source $NVM_DIR/nvm.sh
配置需要全局安装的npm
包
在$NVM_DIR
文件夹添加default-packages
,即可在安装指定node
版本后,自动全局安装指定的npm
包的最新版本,示例:
# $NVM_DIR/default-packages
express-generator
gulp
node-gyp
pm2
supervisor
使用 .nvmrc 配置项目的 node 版本
如果你的系统设置 node
版本与项目所需的版本不同,则可在项目根目录或其任意父级目录中创建 .nvmrc
文件,在文件中指定使用的 node
版本号.
cd <项目根目录> #进入项目根目录
echo 8 > .nvmrc #添加 .nvmrc 文件
nvm use #无需指定版本号,会自动使用 .nvmrc 文件中配置的版本
node -v #查看 node 是否切换为对应版本
问题
sudo node
出现node: command node found
,这是因为nvm安装在当前用户下,在/usr/local/bin/
下找不到node命令,可以通过建立软链接的方法解决。
sudo ln -s "$NVM_BIN/node" "/usr/local/bin/node"
sudo ln -s "$NVM_BIN/npm" "/usr/local/bin/npm"
sudo ln -s "$NVM_BIN/npx" "/usr/local/bin/npx"
附录
默认别名
node
:最新版本node
iojs
:最新版本io.js
stable
:此别名已被弃用,只能真正适用于node v0.12
和较早版本。目前,这个别名被node
替代。unstable
:这个别名指向node v0.11-
最后一个“不稳定”node
,1.0之后,所有节点版本都是稳定的。- 无论何时当
nvm
连接到https://nodejs.org,它将为所有可用的LTS
行重新创建适当的本地别名。这些别名(存储在$NVM_DIR/alias/lts
)下,由nvm管理,您不应该修改,删除或创建这些文件,以免导致可能不支持的错误。
命令说明
nvm --help #显示帮助信息
nvm --version #Print out the installed version of nvm
nvm install [-s] <version> #下载制定版本的node, [-s]表示强制从源代码安装. 如果.nvmrc存在,则使用.nvmrc
--reinstall-packages-from=<version> #将指定版本的全局npm包安装到当前版本
--lts #安装时,只能从LTS(长期支持)版本中进行选择
--lts=<LTS name> #安装时,只能选择特定LTS版本,参数LTS name可以在$NVM_DIR/alias/lts目录可以查看
--skip-default-packages #安装时,如果存在default-packages文件,请跳过
--latest-npm #安装后,尝试升级到node版本上的最新的npm版本
nvm uninstall <version> #卸载指定版本
nvm uninstall --lts #卸载长期支持版本,默认使用别名 lts/* , 如果存在.
nvm uninstall --lts=<LTS name> #卸载指定别名的长期支持版本
nvm use [--silent] <version> #指定当前使用的版本. 如果存在.nvmrc,则使用.nvmrc
--lts #参见上面说明
--lts=<LTS name> #参见上面说明
nvm exec [--silent] <version> [<command>] #在指定node版本上指定命令. 如果存在.nvmrc,则使用.nvmrc
--lts #参见上面说明
--lts=<LTS name> #参见上面说明
nvm run [--silent] <version> [<args>] #在指定的版本下运行node程序.使用<args>作为参数,如果存在.nvmrc,则使用.nvmrc
--lts #如果存在lts版本,则使用lts版本的node
--lts=<LTS name> #如果存在指定别名的lts版本,则使用
nvm current #当前已激活的node版本
nvm ls #已安装的node列表
nvm ls <version> #已安装的指定版本的node列表
nvm ls-remote #列出可用于安装的远程版本
--lts #列出可用于安装的远程LST版本
nvm ls-remote <version> #列出可用于安装的远程版本,指定version number,则给定的<version>匹配
--lts #列出可用于安装的远程LST版本,指定verison number,则给定的<version>匹配
--lts=<LTS name> #列出可用于安装的指定的远程LST版本,指定verison number,则给定的<version>匹配
nvm version <version> #查看本地指定版本的version
nvm version-remote <version> #查看远程指定版本的version
--lts #只显示LTS(长期支持)版本的version
--lts=<LTS name> #只显示指定LTS(长期支持)版本的version
nvm deactivate #从当前shell中禁用nvm的效果,即去除已激活的node,可以通过nvm use命令重新激活
nvm alias [<pattern>] #显示以<pattern>开始的所有别名,如果没有指定,则显示所有别名
nvm alias <name> <version> #为指定的版本设置别名
nvm unalias <name> #删除名为<name>的别名
nvm install-latest-npm #升级当前版本node的npm到最新版本
nvm reinstall-packages <version> #将指定版本的全局npm包安装到当前版本
nvm unload #从shell中卸载nvm命令, 可以通过 . nvm.sh重新激活
nvm which [<version>] #显示nvm的node安装路径,也可选择指定node版本. 如果存在.nvmrc,则使用.nvmrc
nvm cache dir #显示nvm缓存目录的路径
nvm cache clear #清空nvm的缓存目录$NVM_DIR/.cache