解决nvm启动慢, 自动检测 .nvmrc

问题

新建终端时, 由于载入nvm, 导致终端载入超过1秒.
在nvm安装时, 要求在在 ~/.bash_profile, ~/.zshrc, ~/.profile, ~/.bashrc 中的一个载入以下内容

1
2
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm

就是. "$NVM_DIR/nvm.sh"拖慢了终端的启动

解决方案

从官方 issue#860上了解到, 可以使用 --no-use 和 手动指定默认 node 路径来加快执行速度

1
2
3
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" --no-use
export PATH=$HOME/.nvm/versions/node/v8.0.0/bin/:$PATH

默认路径可以通过 nvm which default 获取

检查 .nvmrc 自动载入对应node版本处理

通过判断是否首次载入来加快速度

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 自动切换node版本 #
nvmVersionFirstDetect=1;
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 [[ ${nvmVersionFirstDetect} -eq 0 && "$node_version" != "$(nvm version default)" ]]; then
echo "Reverting to nvm default version"
nvm use default
fi
nvmVersionFirstDetect=0
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc
load-nvmrc

load-nvmrc

参考文档


文章若有纰漏请大家补充指正,谢谢~~

http://blog.xinshangshangxin.com SHANG殇