nvm

The Node Version Manager or nvm in short is a great tool.

We could debate the pros and cons of switching between multiple versions of NodeJS & NPM versus dockerized containers for each specific version of NodeJS & NPM but we won't tackle that here.

Instead we will focus on a common use case for those who are used to switching between multiple versions of NodeJS & NPM.

For those developers who are working across multiple nodejs projects, each with a different version ... you may end up running one of the projects using a version that wasn't meant for it. It can be tricky to remember and switch the version via nvm per terminal window/tab. Luckily this can be automated by leveraging the metadata from .nvmrc file in your projects.

My solution isn't a solution generic enough but I mixed together the previous suggestions from this thread with stackoverflow to add the following for mac/osx in my ~/.bash_profile and it worked well:

# change title name of tab in terminal
function title {
    echo -ne "\033]0;"$*"\007"
}

cd() {
  builtin cd "$@" || return
  #echo $PREV_PWD
  if [ "$PWD" != "$PREV_PWD" ]; then
    PREV_PWD="$PWD";
    title $(echo ${PWD##*/}) $(node -v);
    if [ -e ".nvmrc" ]; then
      nvm use;
      # set tab terminal name to be cwd and node version
      title $(echo ${PWD##*/}) $(node -v);
    else
      nvm use default;
    fi
  fi
}

Now I can do:

# I always switch to the default version `v0.10.44`
# when I go to a folder that does not have `.nvmrc`
$ cd ~/dev/
Now using node v0.10.44

# If `.nvmrc` exists then the version is switched
# to the one specified in that file.
$ cd ~/dev/ts-sandbox-2/
Found '~/dev/ts-sandbox-2/.nvmrc' with version <4>
Now using node v4.4.7

# and again
$ cd ~/dev/
Now using node v0.10.44

Last updated