场景

○ 使用 nvm 管理本地多版本 Node.js,默认使用版本 14。某个项目当前仅支持版本 10,每次执行”nvm use”手动切换太麻烦了。
○ 想到”.npmrc”文件可以指定仅对项目生效的配置,对应在网上找”.nvmrc”找到了解决办法。

操作步骤(MacOS环境)

以场景需求为例的操作步骤如下:

■ 命令行进入需指定 node 版本的项目下,先使用”nvm use v10.17.0”切换到目标版本,再执行”node -v > .nvmrc”将 node 版本号保存到”.nvmrc”文件,如果只限制第一级版本号可将文件内容改为”v10”。
■ 添加命令行初始化脚本。如果使用的是 zsh 命令行,通过”vim $HOME/.zshrc”追加如下脚本内容到文件。其他类型命令行脚本参考nvm 的 README.md 中说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# nvm check when zsh initializing
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

# nvm check when running cd command
cd-nvm() {
builtin cd "$@"
if [[ -f .nvmrc ]]; then
load-nvmrc
fi
}
alias cd='cd-nvm'

# changes take effect
source ~/.bash_profile

■ 以上脚本实现了”从项目目录直接打开命令行”和”通过 cd 命令进入项目目录”两种情况下自动切换 node 到 nvm 默认版本或”.nvmrc”文件指定版本。

参考文献

How to write a .nvmrc file which automatically change node version
Automatically switch to correct version of Node based on project
nvm README.md