Working with Multiple NodeJS Versions

Working with Multiple NodeJS Versions

When you are a NodeJS developer and you develop/run multiple applications on the local machine, this is a problem that you might have definitely encountered. This problem has become worse since new features are pouring into NodeJS and you have to keep up with the flow. For example, say you have currently few applications running on NodeJS version 4.x.x and you need to go for ES6 features using NodeJS 6.x.x . At this moment, you need both of these applications running on top of different Node.JS versions without using containers such as Docker in your local machine.

That is the moment when the tools such as nvm or n come for the rescue.

Multiple Node JS Versions with n

‘n’ can be installed using npm simply by running the following command. Depending on your operating systems and permissions, you might require sudo in front of.

npm install -g n

After installing n, you can switch between different versions of NodeJS installations as follows. If you don’t have the requested version installed on your machine, n will automatically download it, install it and then will switch the version.


n 4.4.1 # this will install v4.4.1
n 6.9.2
n 7.0.0
n stable # this will install the latest stable version of node
n latest # this will install the latest version of node

You can also list the install NodeJS versions in your machine running just n, and then you can graphically switch between the installed versions.

Based on my experience, at the time of this writing, this tool works best in OSX installations, it was a bit tedious for me to get this work in Linux (Ubuntu, for an example). For Linux, I suggest using NVM for switching between versions (discussed later in this post). Please place a comment if you have experienced otherwise.

You can also dynamically change the NodeJS version for a particular application using n. Consider the following script:

# test.js
console.log("Running this script as : " + process.version);

I can run this script test.js using any NodeJS version using n as follows:

n use 7.0.0 test.js

This will provide the output: Running this script as v7.0.0

Multiple Node JS Versions with NVM

NVM (Node Version Manager) can also be used to manage multiple NodeJS versions at the same time. You can install setup NVM in your machine by running the following commands. Following steps were extracted from the original documentation at nvm’s GitHub repository.

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash

Then run the following command to enable nvm command, if you are trying to use nvm in Linux.

source ~/.bashrc

If you are using Mac OS and use bash, you need to run the following command. If ~/.bash_profile file is not there, you might need to create it first.

source ~/.bash_profile

Note! If you are using a different shell such as zsh, you'll have to run the source command accordingly. e.g, for zsh it should be source ~/.zshrc.

To verify whether it has been successfully installed, run the following command which should output nvm if it has been correctly installed

command -v nvm          # should output 'nvm'

Once this is set up, you can install any NodeJS version as follows:

nvm install v4.4.1  #this will installed 4.4.1
nvm install v6.9.1  #this will install 6.9.1

Once the version is installed, you can switch to it anytime by running the following command. The output is also displayed here:

$ nvm use 4.4.1
Now using node v4.4.1 (npm v4.0.3)

Please note that NVM is only installed for the current user. It’s not exactly an application installed, but a set of shell commands. Therefore, those commands won’t be available to other users. If other users need to maintain different node versions, you need to install nvm for each user. Due to the same reason, one user’s nvm version can be different from the other.

Similar to n you can use nvm to dynamically select a NodeJS version for a particular application. To run a script test.js on any installed NodeJS version, you can run the command:

nvm run 4.4.1 test.js

You can also run it as:

nvm exec 4.4.1 node test.js

It would be tedious to always type the NodeJS version as above to run your application if you are simultaneously working on multiple projects which require different NodeJS versions. As a solution, you can leverage a .nvmrc file in your project.

Using a .nvmrc file in your project

Go to your project root and create a file with name .nvmrc. Then specify your project’s NodeJS version in the .nvmrc file.

v6.9.1

After setting up .nvmrc file, all nvm command such as nvm run, nvm exec will obey to this configuration. Then you can simply run the commands as follows to start your app.

$ nvm run app.js
Found '/Users/thejsblog/mynodeapp/.nvmrc' with version <v6.9.1>
Running node v6.9.1 (npm v3.10.8)

As above, nvm will detect the .nvmrc file and run the script with the specified version. If you want to run npm install for your required NodeJS version, you can run it as follows:

$ nvm exec npm install
Found '/Users/thejsblog/mynodeapp/.nvmrc' with version <v6.9.1>
Running node v6.9.1 (npm v3.10.8)

You can visit NVM documentation to discover more on this tool. I prefer using nvm in both MacOS and Linux. In MacOS, I suggest using nvm because, at the time of this writing, it is a bit hard to get n working on Linux.