« Back to Index

[Lazy Load NVM]

View original Gist on GitHub

Tags: #lazy #load #nvm #node

Lazy Load NVM.bash

# lazyload nvm
# all props goes to http://broken-by.me/lazy-load-nvm/
# grabbed from reddit @ https://www.reddit.com/r/node/comments/4tg5jg/lazy_load_nvm_for_faster_shell_start/
#
# NOTE: this will cause some confusing behaviour when opening fresh terminal prompt
#       in that a previously installed command (e.g. npm install -g dockly) won't exist
#       e.g. executing the `dockly` command will fail unless you execute `nvm` first
#       this is because we're lazy loading nvm and so it won't auto-load its default node version

lazynvm() {
  unset -f nvm node npm
  export NVM_DIR=~/.nvm
  # shellcheck source=/dev/null
  [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm
}

nvm() {
  lazynvm
  nvm "$@"
}

node() {
  lazynvm
  node "$@"
}

npm() {
  lazynvm
  npm "$@"
}

# UPDATE:
#
# the following was added dynamically to .bashrc but I move it to .localrc instead
# note: manually added --no-use to prevent it loading nvm on each shell load
#       so to load npm/node, execute: nvm use node
#
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" --no-use
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"