.nvmrc介绍

.nvmrc 文件是一个简单的文本文件,它指定了你的项目应该使用的 Node.js 版本。这个文件通常位于你的项目的根目录下。

当你在项目目录中运行 nvm use 命令时,NVM(Node Version Manager)会查找 .nvmrc 文件,并切换到文件中指定的 Node.js 版本。

例如,如果你的 .nvmrc 文件中的内容是 14.17.0,那么当你在项目目录中运行 nvm use 命令时,NVM 会切换到 Node.js 14.17.0 版本。

创建 .nvmrc

如果你想为你的项目创建一个 .nvmrc 文件,你可以在项目的根目录下创建一个名为 .nvmrc 的文件,并在文件中写入你想使用的 Node.js 版本。例如:

echo "12.18.2" > .nvmrc
echo "v12.18.2" > .nvmrc
echo "lts/fermium" > .nvmrc

终端自动切换Node版本

当使用 nvm use 切换版本仍然觉得麻烦,想要打开终端自动切换 node 版本,也可以实现

zsh 终端根据 .nvmrc 文件自动切换 node 版本:

在 $HOME/.zshrc 中添加以下代码后,每次进入一个包含 .nvmrc 文件的目录时自动调用 nvm use

# 温馨提示: 将其放在 nvm 初始化之后
# nvm 根据 .nvmrc 自动切换 node 版本
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

编辑好 .zshrc 文件后,执行以下命令使其立即生效

source ~/.zshrc

效果如下所示,进入一个含有 .nvmrc 文件的目录会自动切换当前窗口的 node 版本,退出目录时自动切换为默认 node 版本。

注意❗

构建中使用 .nvmrc 文件

本地node版本构建成功后,云端配置使用代码库中.nvmrc文件中的版本,即可保证版本号一致,减少构建出错。 如图:

常见问题

Windows 中 nvm use 无法切换问题。

可以直接使用下面的代码切换。

nvm use $(cat .nvmrc)

也可以配置 scripts ,通过 npm run nvm 即可切换到指定版本。

"scripts": { 
	"nvm":"node lvnvm.js",
}
const fs = require('fs');
const os = require('os');
const { execSync } = require('child_process');
 
if (fs.existsSync('.nvmrc')) {
  const nvmrcContent = fs.readFileSync('.nvmrc', 'utf8').trim();
  const nvmVersion = os.platform() === 'win32' ? execSync('type .nvmrc', { encoding: 'utf8' }).trim() : nvmrcContent;
  try {
    execSync(`nvm use ${nvmVersion}`, { stdio: 'inherit' });
		console.log('\x1b[32m%s\x1b[0m', 'Node.js 版本切换成功');
  } catch (error) {
    console.error('\x1b[31m%s\x1b[0m','Node.js 版本切换失败 Check installation nvm');
  }
} else {
	console.error('\x1b[31m%s\x1b[0m', '.nvmrc 文件不存在');
}

注意❗

注意由于windows不能直接执行sh脚本,需要借助Git bash,因此脚本文件只能用js执行。

扩展阅读