diff --git a/modules/node/init.zsh b/modules/node/init.zsh index 6d600789..618ddd0e 100644 --- a/modules/node/init.zsh +++ b/modules/node/init.zsh @@ -6,13 +6,43 @@ # Zeh Rizzatti # +lazy_load_nvm() { + NVM_DIR=$1 + # Skip adding binaries if there is no node version installed yet + if [ -d $NVM_DIR/versions/node ]; then + NODE_GLOBALS=(`find $NVM_DIR/versions/node -maxdepth 3 \( -type l -o -type f \) -wholename '*/bin/*' | xargs -n1 basename | sort | uniq`) + fi + NODE_GLOBALS+=("nvm") + + load_nvm () { + # Unset placeholder functions + for cmd in "${NODE_GLOBALS[@]}"; do unset -f ${cmd} &>/dev/null; done + + # Load NVM + [ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" + + # (Optional) Set the version of node to use from ~/.nvmrc if available + nvm use 2> /dev/null 1>&2 || true + + # Do not reload nvm again + export NVM_LOADED=1 + } + + for cmd in "${NODE_GLOBALS[@]}"; do + # Skip defining the function if the binary is already in the PATH + if ! which ${cmd} &>/dev/null; then + eval "${cmd}() { unset -f ${cmd} &>/dev/null; [ -z \${NVM_LOADED+x} ] && load_nvm; ${cmd} \$@; }" + fi + done +} + # Load manually installed NVM into the shell session. if [[ -s "$HOME/.nvm/nvm.sh" ]]; then - source "$HOME/.nvm/nvm.sh" + lazy_load_nvm "$HOME/.nvm" # Load package manager installed NVM into the shell session. elif (( $+commands[brew] )) && [[ -d "$(brew --prefix nvm 2>/dev/null)" ]]; then - source $(brew --prefix nvm)/nvm.sh + lazy_load_nvm "$(brew --prefix nvm)" # Return if requirements are not found. elif (( ! $+commands[node] )); then