11

I have a pretty common (i guess) problem. Many of my projects utilize nodejs, some for business logic, others only for some building task.

I need to have different runtimes in different projects, one of my electron apps requires node 7.10.0, a typical build suite requires node 8.x.

Now i know - i can use sudo n 7.10.0 or sudo n latest to switch the runtime globally on my computer (For those, who dont know this - have a look at "n")

Anyway, IMO this is not so convenient (some times, i need to rebuild all the modules after switching versions, often i forget to switch and so on). Is there a way of telling node which interpreter to use? Can i use a .npmrc file in a project directory to force a specific nodejs version within that subdirectory?

I searched exactly for this (npmrc node version) but was not lucky enough to find something.

monami
  • 594
  • 2
  • 9
  • 32
Philipp Wrann
  • 1,751
  • 3
  • 19
  • 29

4 Answers4

2

Okay, i found a similar quesion:

Automatically switch to correct version of Node based on project

it seems you can install "avn" and use a .node-version file to do exactly that.

sudo npm install -g avn avn-n
avn setup

then you can create a .node-version file in your project and enter the desired version

echo 7.10.0 > .node-version

Then avn will detect that and activate the correct version

Unfortunately i get an additional permissions error. So to make this work, you need to install/configure "n" to work without sudo/root.

Philipp Wrann
  • 1,751
  • 3
  • 19
  • 29
  • hello, same permission error for me ```checkPermissions Missing write access, Error: EACCES: permission denied, access '/usr/local/lib/node_modules/avn```. How did you solve that? – DeLac Dec 19 '18 at 14:34
  • Before installing npm create a file called `.npmrc` and place it inside your home directory. the content of that file: `prefix=${HOME}/.npm-packages` This will make npm install packages to your home directory rather than usr/local... If you dont want to reinstall everything you can try to fix all kinds of permissions manually. Have a look at the value of your $N_PREFIX environment variable. This is the location your packages are installed. I tried to fix that but ended up with reinstalling everything :-) – Philipp Wrann Jan 02 '19 at 10:14
2

If you're fine with using another tool you could use nvshim.

pip install nvshim  # this is all you need to do

It does not slow your shell startup or switching directories, instead moving the lookup of which node version to when you call node, npm or npx by shimming those binaries. More details in the docs.

Source, I wrote the tool.

iamogbz
  • 99
  • 1
  • 13
0

NVM (Node Version Manager) allow us to use different versions of node quite easily on a single machine. You can have a look at here how to configure and use it.

Daud Ahmed
  • 190
  • 1
  • 10
0

Volta can be used to manage multiple nodejs, npm or yarn versions on different projects on same machine. It's cross-platform.

For example you can run volta pin node@14 in project directory and this will set node to v14 if it exists otherwise it will download and then set it.

More information here https://docs.volta.sh/guide/

Maksat Rahmanov
  • 377
  • 3
  • 10