Automatisch die richtige Node Version nutzen mit zsh und nvm

Ich nutze gerne nvm um die Node Version auf meinem Rechner zu verwalten und daher ist es nur logisch auch eine .nvmrc Datei in Projekten zu haben, mit der ich die jeweils passende Node Version festlege.

In diesem Projekt ist es etwa die aktuelle LTS Version von node:

lts/*

Jetzt könnte ich, wenn ich ins Projekt wechsle einfach nvm use ausführen, um die Version zu laden, ehrlicherweise vergesse ich das aber auch gerne mal. Glücklicherweise lässt sich das mit einer Anpassung in meiner ~/.zshrc (ich nutze Zsh und Oh My Zsh) schnell korrigieren. Hinter der Initialisierung von nvm müsst ihr einfach den folgenden Code einfügen:

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
  local node_version="$(nvm version)"
  local nvmrc_path="$(nvm_find_nvmrc)"

  if [ -n "$nvmrc_path" ]; then
    local nvmrc_node_version=$(nvm version "$(cat "${nvmrc_path}")")

    if [ "$nvmrc_node_version" = "N/A" ]; then
      nvm install
    elif [ "$nvmrc_node_version" != "$node_version" ]; then
      nvm use
    fi
  elif [ "$node_version" != "$(nvm version default)" ]; then
    echo "Reverting to nvm default version"
    nvm use default
  fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

Das steht auch in der offiziellen Doku zu nvm, aber wer liest schon Anleitungen 😅