I tried setting up the better known nvm-windows to automatically change the node
version. But unsuccessfully!
When I used to run nvm use
the node version changed globally.
I have read about nvs: Automatic Switching Per Directory (github.com) in nvs readme file
and decided to give it a try.
Remove nvm-windows
Go to C:\Users\[username]\AppData\Roaming\nvm
and run unins000.exe
by double clicking it.
Install nvs
I downloaded the nvs-1.6.0.msi version of nvs
and then ran this file by double clicking on it.
Adding node versions
To add a specific node
version, run nvs add
with the version number:
❯ nvs add 12.21.0
Adding: node/12.21.0/x64
Extracting [###########################] 100%
PATH += $env:LOCALAPPDATA\nvs\node\12.21.0\x64
Setting the default node version
Run nvs link
with the version number:
nvs link 12.21.0
Setup Git-Bash
Git-Bash
is my fallback. It allows the use Unix command sintax.
Add to C:\Users\[username]\.bash_profile
these two lines:
if [ -f ~/.bashrc ]; then . ~/.bashrc; fi
Add to C:\Users\[username]\.bashrc
these lines (if this file is missing, create it in notepad
):
function setupNvs {
export NVS_HOME="$LOCALAPPDATA\\nvs";
[ -s "$NVS_HOME/nvs.sh" ] && source "$NVS_HOME/nvs.sh" >> /dev/null;
return 0;
}
setupNvs
Look at th line export NVS_HOME="$LOCALAPPDATA\\nvs";
this is where windows env
(%LOCALAPPDATA%\nvs) is converted to unix env
. In case of error see for example: superuser.com: How To Use Localappdata With Git Bash In Windows
nvs Basic Usage
Open PowerShell
or Git-Bash
terminal.
Let's create two project folders with two different .nvmrc
files using these commands:
- PowerShell
- Git-Bash
cd ~
mkdir one
cd one
"10.24.0" | Out-File .nvmrc # create .nvmrc file with node version
[string]::Join( "`n", (gc .nvmrc)) | sc .nvmrc # convert the line above from Windows to Unix
cd ~
mkdir two
cd two
"14.16.0" | Out-File .nvmrc # create .nvmrc file with node version
[string]::Join( "`n", (gc .nvmrc)) | sc .nvmrc # convert the line above from Windows to Unix
cd ~
mkdir one
cd one
echo "10.24.0" > .nvmrc # create .nvmrc file with node version
cd ~
mkdir two
cd two
echo "14.16.0" > .nvmrc # create .nvmrc file with node version
Manual switching using .nvmrc
Let's go to the project one
and run nvs auto
(in PowerShell
or Git-Bash
):
❯ nvs auto
PATH -= $env:LOCALAPPDATA\nvs\default
PATH += $env:LOCALAPPDATA\nvs\node\10.24.0\x64
If everything is ok, nvs
will automatically download the correct node
version and activate it.
In case of an error, you may need to edit or replace this line:
[string]::Join( "`n", (gc .nvmrc)) | sc .nvmrc
source: stackoverflow.com: Unix Format Files With Powershell
Then open second terminal, go to the project two
folder and again run nvs auto
:
❯ nvs auto
PATH -= $env:LOCALAPPDATA\nvs\default
PATH += $env:LOCALAPPDATA\nvs\node\14.16.0\x64
Again, nvs
install the required node version and then change the environment variable
to use it.
Check Switching Ability
Check the version of node in the folder one
(in first terminal):
❯ node -v
v10.24.0
Check the node version in the folder two
(in second terminal):
❯ node -v
14.26.0
Hence, nvs
changes the node versions locally, one node version per terminal.
Which was required to check.