浏览代码

feat(nodenv): add plugin for `nodenv` (#9880)

Co-authored-by: Matthew Boston <matthew@matthewboston.com>
Carlos Eduardo Monti 2 年之前
父节点
当前提交
21bdb18b2d
共有 2 个文件被更改,包括 63 次插入0 次删除
  1. 20 0
      plugins/nodenv/README.md
  2. 43 0
      plugins/nodenv/nodenv.plugin.zsh

+ 20 - 0
plugins/nodenv/README.md

@@ -0,0 +1,20 @@
+# nodenv plugin
+
+The primary job of this plugin is to provide `nodenv_prompt_info` which can be added to your theme to include Node
+version information into your prompt.
+
+To use it, add `nodenv` to the plugins array in your zshrc file:
+
+```zsh
+plugins=(... nodenv)
+```
+
+## Functions
+
+* `nodenv_prompt_info`: displays the Node version in use by nodenv; or the global Node
+  version, if nodenv wasn't found. You can use this function in your prompt by adding
+  `$(nodenv_prompt_info)` to PROMPT or RPROMPT:
+
+  ```zsh
+  RPROMPT='$(nodenv_prompt_info)'
+  ```

+ 43 - 0
plugins/nodenv/nodenv.plugin.zsh

@@ -0,0 +1,43 @@
+# This plugin loads nodenv into the current shell and provides prompt info via
+# the 'nodenv_prompt_info' function.
+
+FOUND_NODENV=${+commands[nodenv]}
+
+if [[ $FOUND_NODENV -ne 1 ]]; then
+  nodenvdirs=(
+    "$HOME/.nodenv"
+    "/usr/local/nodenv"
+    "/opt/nodenv"
+    "/usr/local/opt/nodenv"
+  )
+  for dir in $nodenvdirs; do
+    if [[ -d "${dir}/bin" ]]; then
+      export PATH="$PATH:${dir}/bin"
+      FOUND_NODENV=1
+      break
+    fi
+  done
+
+  if [[ $FOUND_NODENV -ne 1 ]]; then
+    if (( $+commands[brew] )) && dir=$(brew --prefix nodenv 2>/dev/null); then
+      if [[ -d "${dir}/bin" ]]; then
+        export PATH="$PATH:${dir}/bin"
+        FOUND_NODENV=1
+      fi
+    fi
+  fi
+fi
+
+if [[ $FOUND_NODENV -eq 1 ]]; then
+  eval "$(nodenv init --no-rehash - zsh)"
+  function nodenv_prompt_info() {
+    nodenv version-name 2>/dev/null
+  }
+else
+  # fallback to system node
+  function nodenv_prompt_info() {
+    echo "system: $(node -v 2>&1 | cut -c 2-)"
+  }
+fi
+
+unset FOUND_NODENV nodenvdirs dir