LoginSignup
32
18

More than 5 years have passed since last update.

NVM の nvm.sh を遅延ロードしてシェルの起動を高速化する

Last updated at Posted at 2014-07-22

NVM のインストール手順は .bashrc や .zshrc に source ~/.nvm/nvm.sh を記述するよう指示している。しかし nvm.sh は比較的複雑なので source に時間がかかり、インタラクティブシェルの起動がわずかに遅くなる。できればこのタイムロスをなくしたい。

nvm.sh の大半を占めるコードは nvm コマンドに関するものであるため、 nvm コマンドを実行するときに初めて nvm.sh をロードするようにしてみる。

.bashrc|.zshrc
# 仮の nvm コマンド
nvm() {
    # まず仮の nvm コマンドを unset
    unset -f nvm

    # nvm.sh をロード
    # ここで本物の nvm コマンドが定義される
    source "${NVM_DIR:-$HOME/.nvm}/nvm.sh"

    # 仮の nvm コマンドに渡された引数を本物に受け渡す
    nvm "$@"
}

このままでは nvm コマンドを実行するまで Node が $PATH に追加されない。パスは .bash_profile または .zshenv で明示的にセットする。

.bash_profile|.zshenv
# あらかじめ `nvm default vX.Y.Z` してエイリアス "default" を作っておく

PATH=${NVM_DIR:-$HOME/.nvm}/default/bin:$PATH
MANPATH=${NVM_DIR:-$HOME/.nvm}/default/share/man:$MANPATH
export NODE_PATH=${NVM_DIR:-$HOME/.nvm}/default/lib/node_modules

# (以下 Zsh のみ)
# $NODE_PATH にバージョン番号が含まれていないと `yo doctor` が警告を出す
# 次のように書くと $NODE_PATH のシンボリックリンクが展開され、警告が出なくなる
# (Hint: .nvm/default は .nvm/vX.Y.Z へのシンボリックリンク)
NODE_PATH=${NODE_PATH:A}
32
18
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
32
18