Search code examples
node.jsnpmnode-modulesnvm

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
+ [email protected]
added 81 packages from 311 contributors in 1.715s

And:

npm list -g --depth=0
/Users/paulrberg/.nvm/versions/node/v9.3.0/lib
└── [email protected]

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?

Solution

  • 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)