正在加载,请稍候…

nvm 与 Node.js 版本管理:最佳实践

使用 nvm 管理多个 Node.js 版本。学习安装、版本切换、.nvmrc 文件以及与常见开发工作流的集成。

nvm 与 Node.js 版本管理:最佳实践

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

nvm 与 Node.js 版本管理:最佳实践插图

基本命令

# 列出可用的 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

nvm 与 Node.js 版本管理:最佳实践插图

.nvmrc 文件

# 在项目根目录创建 .nvmrc
echo "20" > .nvmrc
# 或
echo "lts/iron" > .nvmrc

# 使用 .nvmrc 中的版本
nvm use         # 自动读取 .nvmrc
nvm install     # 安装 .nvmrc 中指定的版本

nvm 与 Node.js 版本管理:最佳实践插图

通过 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 版本。