前置知识

需要了解一些关于 nvm 的基本知识。

nvmrc 如何使用

创建一个 .nvmrc 文件,文件内容是一个 Node 版本的数字或者其它 nvm 可以理解的文本内容(例如:v14.21.3, 可以在终端输入 nvm --help 查看更多使用方法)。有了 .nvmrc 文件后,我们在终端没有指定 Node 版本时执行 nvm use, nvm install, nvm exec, nvm run, 和 nvm which 命令时会使用 .nvmrc 文件指定的 Node 版本。

nvm use 等命令将从当前目录向上遍历目录结构寻找文件 .nvmrc。也就是说,在带有 .nvmrc 的目录的任何子目录中运行nvm use 等命令,.nvmrc 都会起作用。

集成到 shell

zsh 为例,编辑 .zshrc 文件,添加以下代码:


autoload -U add-zsh-hook
load-nvmrc() {
  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" != "$(nvm version)" ]; then
      nvm use
    fi
  elif [ -n "$(PWD=$OLDPWD nvm_find_nvmrc)" ] && [ "$(nvm version)" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

编辑保存之后,执行 source ~/.zshrc 使内容生效。
此时,在有 .nvmrc 文件项目打开终端,会发现已经自动运行 nvm use

$ j test
/Users/Maria/Desktop/test/
Found '/Users/Maria/Desktop/test/.nvmrc' with version <v14.21.3>
Now using node v14.21.3 (npm v6.14.18)

如果没有找到 .nvmrc,会切换到 system default 的 Node 版本:

$ j desk
/Users/Maria/Desktop
Reverting to nvm default version
Now using node v20.0.0 (npm v9.6.4)

注意

  • .nvmrc 文件必须是一个 <version> 符合 nvm --help 所列出的,版本号后跟换行符,不允许尾随空格