使用nvm导致zsh启动慢

  1. 1. 问题
  2. 2. 解决方案
  3. 3. 检查 .nvmrc 自动载入对应node版本处理
  • 参考文档

    问题

    新建终端时, 由于载入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

    参考文档


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

    http://blog.xinshangshangxin.com SHANG殇