NVM install node won't change NPM global modules root folder - node.js

Hi I've just upgrade Node to v9.3.0 and copied my NPM global modules from the last installed version:
nvm install 9.3.0 --reinstall-packages-from=9.2.0
But when I do
npm root -g
It still says
/Users/user/.nvm/versions/node/v9.2.0/lib/node_modules
How do I upgrade Node with NVM and automatically change NPM global modules root folder to the latest version as well?

(nvm maintainer here)
nvm install 9.3.0 --reinstall-packages-from=9.2.0 should certainly install 9.3, install 9.2's global packages, and then "use" 9.3.
However, that won't change the default. Assuming the install command worked, nvm use 9.3 should, for that shell session, set you up.
nvm alias default node will always use the latest available node version when you open a new terminal.

Related

How to install ember-cli version 1.13.11 without global?

I just install nvm software and I will run nvm install 4.0.0. The node will download and npm also download and install it automatically. Next, I will run nvm use 4.0.0 set-up will set it. now I see my node version using node -v it shows v4.0.0 all are correct all comments under admin only and I will create one folder and change to that path and I will run npm install ember-cli#4.0.0 it will install it successfully but after that I use ember -v it shows ember is not recognized?

Upgraded node and npm via nvm, but old node is still used for global packages

I've been using node 9.3.0 for a long time, but I recently migrated to 10.12.0. Everything went fine, when I do node -v and npm -v I get the correct versions:
Paul-Bergs-Macbook:node paulrberg$ node -v
v10.12.0
Paul-Bergs-Macbook:node paulrberg$ which node
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/node
Paul-Bergs-Macbook:node paulrberg$ npm -v
6.4.1
Paul-Bergs-Macbook:node paulrberg$ which npm
/Users/paulrberg/.nvm/versions/node/v10.12.0/bin/npm
Howeven, when I'm trying to run any npm command, the old version is used. That is:
Paul-Bergs-Macbook:node paulrberg$ npm i truffle -g
/Users/paulrberg/.nvm/versions/node/v9.3.0/bin/truffle -> /Users/paulrberg/.nvm/versions/node/v9.3.0/lib/node_modules/truffle/build/cli.bundled.js
+ truffle#4.1.14
added 81 packages from 311 contributors in 1.715s
And:
npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── truffle#4.1.14
Not sure if this is some bash code still pointing to the last version, but I can't seem to find any proof for that. Running env and checking for 9.3.0 environment variables yields no result.
What I did so far:
Delete node 9.3.0 with nvm uninstall 9.3.0
Do a fresh install of nvm after deleting it and rebooting the computer
nvm reinstall-with-packages
Deleted ~/.nvmrc and set 10.12.0 in there afterwards
Check if I have an overlapping node from homebrew and I don't
What could the problem be?
After a few hours of painful Unix debugging, I realised the problem was that I set a prefix in npm config:
prefix = "/Users/paulrberg/.nvm/versions/node/v9.3.0"
To fix this, make sure to unset the prefix by doing:
npm config rm prefix
This is mentioned, albeit not necessarily shining in the nvm doc
If you have an ~/.npmrc file, make sure it does not contain any prefix
settings (which is not compatible with nvm)
It looks like you might need to run nvm reinstall-packages
https://github.com/creationix/nvm#migrating-global-packages-while-installing
which says
Migrating global packages while installing
If you want to install a new version of Node.js and migrate npm packages from a previous version:
nvm install node --reinstall-packages-from=node
This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one.
You can also install and migrate npm packages from specific versions of Node like this:
nvm install 6 --reinstall-packages-from=5
nvm install v4.2 --reinstall-packages-from=iojs
The other "solution" is not to use global packages. Particularly when using nvm and not being able to be sure that the global package is for the "current" version it can be better to install locally and use npx to run the local command
truffle installs a truffle command to ./node_modules/.bin when you npm install it so you can npx truffle to run the local one instead of truffle to run the global one
edit:
another thing to check is that node -v and nvm current don't necessarily report the same version.
I wonder if nvm current would report v9.3 for you?
ah, yep, on my machine I can install truffle globally in a different location than node -v reports
> node -v
v9.5.0
> nvm current
system
> nvm use v8
Now using node v8.4.0 (npm v5.3.0)
> node -v
v8.4.0
> nvm current
v8.4.0
> npm install -g truffle
/Users/pauldambra/.nvm/versions/node/v8.4.0/bin/truffle -> /Users/pauldambra/.nvm/versions/node/v8.4.0/lib/node_modules/truffle/build/cli.bundled.js
+ truffle#4.1.14
added 81 packages in 4.364s
So you might be missing an nvm use v10 command
I think that a more permanent solution is this section from the support docs.
Default global packages from file while installing
If you have a list of default packages you want installed every time you install a new version, we support that too -- just add the package names, one per line, to the file $NVM_DIR/default-packages. You can add anything npm would accept as a package argument on the command line.

Can't update node globally with nvm?

I want to upgrade node to v8.3 globally. I'm working on the latest OSX and using v0.33.0 of nvm.
I can upgrade successfully in one bash shell:
$ which node
/Users/me/.nvm/versions/node/v8.1.0/bin/node
$ nvm install 8.3 --reinstall-packages-from=8.1
v8.3.0 is already installed.
Now using node v8.3.0 (npm v5.3.0)
Reinstalling global packages from v8.1.4...
Linking global packages from v8.1.4...
$ node -v
But then if I open a new shell, it's still pointing at the old version:
$ which node
/Users/me/.nvm/versions/node/v8.1.0/bin/node
$ node -v
v8.1.0
What am I doing wrong? I can't see anything in my bash profile pointing to the older version.
You need to also set your default node version, like this:
nvm alias default 8.3.0
This should set your version moving forward. Credit:
https://eric.blog/2016/08/23/set-default-node-version-with-nvm/

How do I copy global modules between Node installations using nvm?

I manage my Node installations using nvm. I installed the grunt-cli module globally in my previous installation of node. This allowed me to run the command grunt on in the terminal.
When I installed a new version of Node (5.7.1), I got this error whenever I tried to execute the grunt command:
zsh: command not found: grunt
I discovered that the grunt-cli package had not been installed for the new version of Node.
I could install the grunt-cli package again but I would prefer to do this automatically whenever a new version of Node is installed using nvm.
Is there some way to install all the global modules from a previous version of Node when using nvm ?
This can be achieved using the --reinstall-packages-from option when executing nvm install. From the nvm documentation:
If you want to install a new version of Node.js and migrate npm packages from a previous version:
nvm install node --reinstall-packages-from=node
This will first use "nvm version node" to identify the current version you're migrating packages from. Then it resolves the new version to install from the remote server and installs it. Lastly, it runs "nvm reinstall-packages" to reinstall the npm packages from your prior version of Node to the new one.
If your prior version of Node is 4.3.0, the command will be executed thus:
nvm install v5.7.1 --reinstall-packages-from=4.3.0

How to handle global npm packages after periodic brew upgrade?

Updating node on OS X if node is set up with Homebrew basically appears to nuke my npm -g global packages.
For example my Vim's Syntastic usually runs jshint on js files, but once I update node this will usually just start failing silently.
I'm not really sure what I'm supposed to do about this. I'd like at the very least for there to be some kind of alert that says
Here is the list of global npm packages you currently have installed, these will all be gone after I am done updating node.js!
To fix this kind of problem, I use nvm(Node Version Manager), not brew's node.
brew uninstall node
brew install nvm
Add these line to .bashrc or .bash_profile
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh
Install node using nvm
nvm install 0.10
nvm use 0.10
nvm alias default 0.10
You can see this result
$ node -v
v0.10.30
$ which node
/Users/yourid/.nvm/v0.10.30/bin/node

Resources