Unfortunately nvm use
on Windows does not change the node version to that specified in the .nvmrc
file as its not supported on nvm for Windows: coreybutler/nvm-windows#388
So the easiest solution to this is to use a simple Powershell command that performs an approximation of the command as follows:
nvm use $(Get-Content .nvmrc).replace( 'v', '' );
However, thats a bit awkward and we can do a bit more so instead, we can create an 'alias' to a function that calls the command instead:
function callnvm() {
# Always use argument version if there is one
$versionDesired = $args[0]
if (($versionDesired -eq "" -Or $versionDesired -eq $null) -And (Test-Path .nvmrc -PathType Any)) {
# if we have an nvmrc and no argument supplied, use the version in the file
$versionDesired = $(Get-Content .nvmrc).replace( 'v', '' );
}
Write-Host "Requesting version '$($versionDesired)'"
if ($versionDesired -eq "") {
Write-Host "A node version needs specifying as an argument if there is no .nvmrc"
} else {
$response = nvm use $versionDesired;
if ($response -match 'is not installed') {
if ($response -match '64-bit') {
$response = nvm install $versionDesired x64
} else {
$response = nvm install $versionDesired x86
}
Write-Host $response
$response = nvm use $versionDesired;
}
Write-Host $response
}
}
Set-Alias nvmu -value "callnvm"
Now we only need to type nvmu
in a project folder for it to work properly.
That will only work for the current session, so to make it more globally useful, we can add this content to the Powershell Profile for the current user. You can get the location of this file by typing $profile
in a Powershell session and either edit or create the file and place the content above into it.
If it is necessary to switch node versions automatically in git bash with yarn, use
alias dev='powershell -Command "nvm use (Get-Content .nvmrc); yarn dev"'
in .bashrc