nvm 快速安装教程
https://brew.idayer.com/install/nvm-for-nodejs
nvm
作为一款node
的版本管理工具,在前端开发中是必不可少的,但是因为GitHub
的特殊性,导致很多人是无法用官方教程安装成功,本文旨在整理出如德芙般丝滑的安装教程。
本文介绍的安装方法,你可以理解为通过仓库镜像的方式安装。
如果你能正常稳定访问GitHub
,则无需通过本文的加速方式安装,但是仍然可以借鉴安装流程。
安装
国内加速脚本
export NVM_SOURCE=https://gitee.com/mirrors/nvm.git curl -o- https://gitee.com/mirrors/nvm/raw/master/install.sh | bash
检验安装是否成功
command -v nvm
执行后如果显示nvm
则表示已经安装成功。
如果遇到nvm
命令找不到的问题,请查阅文末的“FAQ”。
配置
1. 设置为系统默认node
因为nvm
安装的结果都是下面这样的格式:
/Users/neo/.nvm/versions/node/v14.17.4/bin/node
为了确保在所有的shell
以及ide
中都可以正常工作,我们需要设置把nvm
安装的node
设置为系统默认。
nvm alias default node
2. 设置node镜像
这里是给安装node
设置镜像。
export NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node nvm install node // 或者 NVM_NODEJS_ORG_MIRROR=https://npmmirror.com/mirrors/node nvm install 4.2
长期替换可以使用下面的设置:
echo 'export NVM_NODEJS_ORG_MIRROR="https://npmmirror.com/mirrors/node"' >> ~/.zshrc
注意! 上面脚本是把配置写入文件.zshrc
,你如果对此不了解,请参考FAQ
,确定是否更换为.bash_profile
。
更新
重新执行安装脚本即可。
安装node
安装最新版本:
nvm install node # "node"代表最新版本
安装指定版本:
nvm install 14.16.1 # or 10.10.0, 8.9.1, etc
通过ls-remote
可以查看所有可安装的版本列表:
nvm ls-remote
然后使用use
启用安装的版本:
nvm use node
nvm use 6.14.4
你也可以通过which
命令查看已安装node
所在目录:
nvm which 5.0
通过以下命令可以安装最新版npm
:
nvm install-latest-npm
设置终端默认node
nvm
包含以下几个别名(alias):
- node: 已安装的
node
最新版 - iojs: 已安装的
io.js
最新版 - stable: 已废弃,现在是
node
的别名 - unstable: 已废弃
当我们安装了新版的node
之后,nvm
默认还会指向旧版本,通过执行以下命令将node
别名指向到最新版。
这样可以解决node
找不到的问题。
nvm alias default node
如果你不想指向已安装的最新版node
,可以直接指向版本号,比如:
nvm alias default 16.20.1
多node环境下使用
在项目中使用不同版本node
你可以在项目根目录中创建.nvmrc
来指定node
版本,文件写入想要的版本号。
然后在根目录使用nvm use
即可,缺点就是每次都要手动执行,如果想实现自动化可以按照下面的设置。
bash
把下面内容追加到~/.bashrc
:
cdnvm() { cd "$@"; nvm_path=$(nvm_find_up .nvmrc | tr -d '\n') # If there are no .nvmrc file, use the default nvm version if [[ ! $nvm_path = *[^[:space:]]* ]]; then declare default_version; default_version=$(nvm version default); # If there is no default version, set it to `node` # This will use the latest version on your machine if [[ $default_version == "N/A" ]]; then nvm alias default node; default_version=$(nvm version default); fi # If the current version is not the default version, set it to use the default version if [[ $(nvm current) != "$default_version" ]]; then nvm use default; fi elif [[ -s $nvm_path/.nvmrc && -r $nvm_path/.nvmrc ]]; then declare nvm_version nvm_version=$(<"$nvm_path"/.nvmrc) declare locally_resolved_nvm_version # `nvm ls` will check all locally-available versions # If there are multiple matching versions, take the latest one # Remove the `->` and `*` characters and spaces # `locally_resolved_nvm_version` will be `N/A` if no local versions are found locally_resolved_nvm_version=$(nvm ls --no-colors "$nvm_version" | tail -1 | tr -d '\->*' | tr -d '[:space:]') # If it is not already installed, install it # `nvm install` will implicitly use the newly-installed version if [[ "$locally_resolved_nvm_version" == "N/A" ]]; then nvm install "$nvm_version"; elif [[ $(nvm current) != "$locally_resolved_nvm_version" ]]; then nvm use "$nvm_version"; fi fi } alias cd='cdnvm' cd $PWD
zsh
把下面内容追加到~/.zshrc
:
# place this after nvm initialization! autoload -U add-zsh-hook load-nvmrc() { local node_version="$(nvm version)" local nvmrc_path="$(nvm_find_nvmrc)" if [ -n "$nvmrc_path" ]; then local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")") if [ "$nvmrc_node_version" = "N/A" ]; then nvm install elif [ "$nvmrc_node_version" != "$node_version" ]; then nvm use fi elif [ "$node_version" != "$(nvm version default)" ]; then echo "Reverting to nvm default version" nvm use default fi } add-zsh-hook chpwd load-nvmrc load-nvmrc
安装时迁移全局npm包
执行时通过reinstall-packages-from
参数指定旧的node
版本,这样可以把指定版本内npm
全局安装的包迁移到当前的node
版本。
nvm install v12.0.0 --reinstall-packages-from=10.0
FAQ
nvm命令找不到(command not found)
需要手动配置环境变量。
执行命令echo $SHELL
,根据结果判断写入的文件:
- /bin/zsh => zsh => .zshrc
- /bin/bash => bash => .bash_profile
.zshrc
echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.zshrc source ~/.zshrc .bash_profile echo 'export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"' >> ~/.bash_profile source ~/.bash_profile