fix(nvm): source nvm script only when used (#11205)

closes #11042
This commit is contained in:
Carlo 2022-10-06 20:01:56 +01:00 committed by GitHub
parent 570158e464
commit 78e85c7d78
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 19 additions and 25 deletions

View file

@ -22,9 +22,9 @@ These settings should go in your zshrc file, before Oh My Zsh is sourced:
nvm has been installed, regardless of chip architecture, use `NVM_HOMEBREW=$(brew --prefix nvm)`. nvm has been installed, regardless of chip architecture, use `NVM_HOMEBREW=$(brew --prefix nvm)`.
- **`NVM_LAZY`**: if you want the plugin to defer the load of nvm to speed-up the start of your zsh session, - **`NVM_LAZY`**: if you want the plugin to defer the load of nvm to speed-up the start of your zsh session,
set `NVM_LAZY` to `1`. This will use the `--no-use` parameter when loading nvm, and will create a function set `NVM_LAZY` to `1`. This will source nvm script only when using it, and will create a function for `node`,
for `node`, `npm`, `yarn`, and the command(s) specified by `NVM_LAZY_CMD`, so when you call either of them, `npm`, `pnpm`, `yarn`, and the command(s) specified by `NVM_LAZY_CMD`, so when you call either of them,
nvm will load with `nvm use default`. nvm will be loaded and run with default version.
- **`NVM_LAZY_CMD`**: if you want additional command(s) to trigger lazy loading of nvm, set `NVM_LAZY_CMD` to - **`NVM_LAZY_CMD`**: if you want additional command(s) to trigger lazy loading of nvm, set `NVM_LAZY_CMD` to
the command or an array of the commands. the command or an array of the commands.

View file

@ -4,37 +4,31 @@ if [[ -z "$NVM_DIR" ]]; then
export NVM_DIR="$HOME/.nvm" export NVM_DIR="$HOME/.nvm"
elif [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/nvm" ]]; then elif [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/nvm" ]]; then
export NVM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvm" export NVM_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/nvm"
elif (( $+commands[brew] )); then
NVM_HOMEBREW="${NVM_HOMEBREW:-${HOMEBREW_PREFIX:-$(brew --prefix)}/opt/nvm}"
if [[ -d "$NVM_HOMEBREW" ]]; then
export NVM_DIR="$NVM_HOMEBREW"
fi
fi fi
fi fi
# Don't try to load nvm if command already available # Don't try to load nvm if command already available
# Note: nvm is a function so we need to use `which` # Note: nvm is a function so we need to use `which`
! which nvm &>/dev/null || return which nvm &>/dev/null && return
if [[ -f "$NVM_DIR/nvm.sh" ]]; then
# Load nvm if it exists in $NVM_DIR
source "$NVM_DIR/nvm.sh" ${NVM_LAZY+"--no-use"}
elif (( $+commands[brew] )); then
# Otherwise try to load nvm installed via Homebrew
# User can set this if they have an unusual Homebrew setup
NVM_HOMEBREW="${NVM_HOMEBREW:-${HOMEBREW_PREFIX:-$(brew --prefix)}/opt/nvm}"
# Load nvm from Homebrew location if it exists
if [[ -f "$NVM_HOMEBREW/nvm.sh" ]]; then
source "$NVM_HOMEBREW/nvm.sh" ${NVM_LAZY+"--no-use"}
else
return
fi
else
return
fi
# Call nvm when first using node, npm or yarn
if (( $+NVM_LAZY )); then if (( $+NVM_LAZY )); then
function node npm yarn $NVM_LAZY_CMD { # Call nvm when first using nvm, node, npm, pnpm, yarn or $NVM_LAZY_CMD
unfunction node npm yarn $NVM_LAZY_CMD function nvm node npm pnpm yarn $NVM_LAZY_CMD {
nvm use default unfunction nvm node npm pnpm yarn $NVM_LAZY_CMD
command "$0" "$@" # Load nvm if it exists in $NVM_DIR
[[ -f "$NVM_DIR/nvm.sh" ]] && source "$NVM_DIR/nvm.sh"
"$0" "$@"
} }
elif [[ -f "$NVM_DIR/nvm.sh" ]]; then
# Load nvm if it exists in $NVM_DIR
source "$NVM_DIR/nvm.sh"
else
return
fi fi
# Autoload nvm when finding a .nvmrc file in the current directory # Autoload nvm when finding a .nvmrc file in the current directory