From 78e85c7d78edeca7f06d6a54ad7f03f10dacde62 Mon Sep 17 00:00:00 2001 From: Carlo Date: Thu, 6 Oct 2022 20:01:56 +0100 Subject: [PATCH] fix(nvm): source nvm script only when used (#11205) closes #11042 --- plugins/nvm/README.md | 6 +++--- plugins/nvm/nvm.plugin.zsh | 38 ++++++++++++++++---------------------- 2 files changed, 19 insertions(+), 25 deletions(-) diff --git a/plugins/nvm/README.md b/plugins/nvm/README.md index a8bc34ae7..1acf12050 100644 --- a/plugins/nvm/README.md +++ b/plugins/nvm/README.md @@ -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_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 - for `node`, `npm`, `yarn`, and the command(s) specified by `NVM_LAZY_CMD`, so when you call either of them, - nvm will load with `nvm use default`. + set `NVM_LAZY` to `1`. This will source nvm script only when using it, and will create a function for `node`, + `npm`, `pnpm`, `yarn`, and the command(s) specified by `NVM_LAZY_CMD`, so when you call either of them, + 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 the command or an array of the commands. diff --git a/plugins/nvm/nvm.plugin.zsh b/plugins/nvm/nvm.plugin.zsh index 630854a71..1fb4d238b 100644 --- a/plugins/nvm/nvm.plugin.zsh +++ b/plugins/nvm/nvm.plugin.zsh @@ -4,39 +4,33 @@ if [[ -z "$NVM_DIR" ]]; then export NVM_DIR="$HOME/.nvm" elif [[ -d "${XDG_CONFIG_HOME:-$HOME/.config}/nvm" ]]; then 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 # Don't try to load nvm if command already available # 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 +if (( $+NVM_LAZY )); then + # Call nvm when first using nvm, node, npm, pnpm, yarn or $NVM_LAZY_CMD + function nvm node npm pnpm yarn $NVM_LAZY_CMD { + unfunction nvm node npm pnpm yarn $NVM_LAZY_CMD + # 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" ${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 + source "$NVM_DIR/nvm.sh" else return fi -# Call nvm when first using node, npm or yarn -if (( $+NVM_LAZY )); then - function node npm yarn $NVM_LAZY_CMD { - unfunction node npm yarn $NVM_LAZY_CMD - nvm use default - command "$0" "$@" - } -fi - # Autoload nvm when finding a .nvmrc file in the current directory # Adapted from: https://github.com/nvm-sh/nvm#zsh if (( $+NVM_AUTOLOAD )); then