
nvm 与 Node.js 版本管理:最佳实践
nvm(Node Version Manager)允许您安装和切换多个 Node.js 版本。
安装
# 安装 nvm
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# 添加到 shell 配置文件(~/.bashrc, ~/.zshrc)
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"
# 重新加载 shell
source ~/.zshrc
基本命令
# 列出可用的 LTS 版本
nvm ls-remote --lts
# 安装特定版本
nvm install 20
nvm install 20.11.0
# 安装最新的 LTS 版本
nvm install --lts
# 使用某个版本(当前会话)
nvm use 20
# 设置默认版本
nvm alias default 20
# 列出已安装版本
nvm ls
# 当前版本
nvm current
# 卸载版本
nvm uninstall 18
.nvmrc 文件
# 在项目根目录创建 .nvmrc
echo "20" > .nvmrc
# 或
echo "lts/iron" > .nvmrc
# 使用 .nvmrc 中的版本
nvm use # 自动读取 .nvmrc
nvm install # 安装 .nvmrc 中指定的版本
通过 Shell 集成实现自动切换
# 添加到 ~/.zshrc 以实现自动切换
autoload -U add-zsh-hook
load-nvmrc() {
local nvmrc_path
nvmrc_path="$(nvm_find_nvmrc)"
if [ -n "$nvmrc_path" ]; then
local nvmrc_node_version
nvmrc_node_version=$(nvm version "$(cat "\${nvmrc_path}")")
if [ "$nvmrc_node_version" = "N/A" ]; then
nvm install
elif [ "$nvmrc_node_version" != "$(nvm version)" ]; then
nvm use
fi
elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
版本间迁移
# 切换版本时重新安装全局包
nvm install 20 --reinstall-packages-from=18
# 列出全局安装的包
npm list -g --depth=0
# 手动迁移
nvm use 18
npm list -g --depth=0 > /tmp/packages.txt
nvm use 20
cat /tmp/packages.txt | awk '{print $2}' | grep -v npm | xargs npm install -g
替代方案:Volta
# Volta - nvm 的更快替代方案
curl https://get.volta.sh | bash
# 安装并固定 Node 版本
volta install node@20
volta pin node@20 # 保存到 package.json
# 自动按项目切换版本
使用 .nvmrc 文件可确保整个团队使用相同的 Node.js 版本。