Automatic version switch for NVM

Please consider reading this article at the original website.

If you’re using multiple versions for each of your projects, you might use the nvm use command every time you need to switch. This gets old very fast and nvm doesn’t have a native solution for this problem.

The NVM documentation has a dedicated section for this. You can go and read them there or continue reading for a curated version.

Manual Switch

$ echo "5.9" > .nvmrc

$ echo "lts/*" > .nvmrc # to default to the latest LTS version

In order to switch, you’ll need to run nvm use but if you cd outside of the directory, the version is not going to switch back to your default.

Pros

  • No additional setup or environment mods.
  • You can commit the file to be shared with peers.
  • Control over the version switch: how and when.

Cons

  • No automatic switch when cd’ing into the project.
  • No default restore when cd’ing outside the project.

Automatic Switch

Add the following content at the end of your .zshrc file, after the nvm initialization.

# place this after nvm initialization!
autoload -U add-zsh-hook
load-nvmrc() {
if [[ -f .nvmrc && -r .nvmrc ]]; then
nvm use
elif [[ $(nvm version) != $(nvm version default) ]]; then
echo "Reverting to nvm default version"
nvm use default
fi
}
add-zsh-hook chpwd load-nvmrc
load-nvmrc

Now every time you cd into a directory you’ll switch to the project version if it has the .nvmrc inside with a valid version.

If you go out of the directory or cd into a directory that doesn’t have the version file, your shell will use the default one in your system.

Pros

  • Automatic switch inside and outside project specific versions.
  • Automatic default version switch if no version is specified.

Cons

  • ZSH dependency.
  • Additional script block in local machine.

That’s it for now, please add in the comments if you’re familiar with another solution.

Web Dev. Solutions Architect. Digital Nomad. Fire Starter. Rational Pessimist. I’m crazy slap-happy and I’m scrappy when I’m nappy.