1
0
Fork 0

Lazy load nvm

nvm takes on average half of a second to load,
which is more than whole prezto takes to load.
This can be noticed when you open a new shell.
To avoid this, we are creating placeholder function for nvm, node,
and all the node packages previously installed in the system to only
load nvm when it is needed.

This code is based on the scripts:
* https://www.reddit.com/r/node/comments/4tg5jg/lazy_load_nvm_for_faster_shell_start/d5ib9fs
* http://broken-by.me/lazy-load-nvm/
* https://github.com/creationix/nvm/issues/781#issuecomment-236350067
pull/1186/head
Rodrigo Fernandes 8 years ago
parent 4f19700919
commit 909a0db72a
No known key found for this signature in database
GPG Key ID: 08E3C5F38969078E

@ -6,13 +6,43 @@
# Zeh Rizzatti <zehrizzatti@gmail.com> # Zeh Rizzatti <zehrizzatti@gmail.com>
# #
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. # Load manually installed NVM into the shell session.
if [[ -s "$HOME/.nvm/nvm.sh" ]]; then 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. # Load package manager installed NVM into the shell session.
elif (( $+commands[brew] )) && [[ -d "$(brew --prefix nvm 2>/dev/null)" ]]; then 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. # Return if requirements are not found.
elif (( ! $+commands[node] )); then elif (( ! $+commands[node] )); then

Loading…
Cancel
Save