Browse Source

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

closes #11042
Carlo 1 year ago
parent
commit
78e85c7d78
2 changed files with 19 additions and 25 deletions
  1. 3 3
      plugins/nvm/README.md
  2. 16 22
      plugins/nvm/nvm.plugin.zsh

+ 3 - 3
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.

+ 16 - 22
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