问题描述
我在设置Vagrant框中遇到npm
问题。我注意到npm
版本有点旧,所以我想用最新版本来检查问题。
我的理解是,您应该能够使用npm install -g npm
更新npm
,但该命令对正在使用的npm
没有影响:
vagrant@box:~$ npm -v
1.3.10
vagrant@box:~$ sudo npm install -g npm
npm http GET https://registry.npmjs.org/npm
npm http 200 https://registry.npmjs.org/npm
npm http GET https://registry.npmjs.org/npm/-/npm-2.1.12.tgz
npm http 200 https://registry.npmjs.org/npm/-/npm-2.1.12.tgz
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.1.12 /usr/local/lib/node_modules/npm
vagrant@box:~$ npm -v
1.3.10
我也尝试使用n
(如我如何更新我的nodeJS到最新版本?中的建议)进行更新,但它既不影响npm
也不影响node
:
vagrant@box:~$ node -v
v0.10.25
vagrant@box:~$
vagrant@box:~$ sudo npm install -g n
/usr/bin/n -> /usr/lib/node_modules/n/bin/n
n@1.2.9 /usr/lib/node_modules/n
vagrant@box:~$ sudo n stable
install : v0.10.33
mkdir : /usr/local/n/versions/0.10.33
fetch : http://nodejs.org/dist/v0.10.33/node-v0.10.33-linux-x64.tar.gz
installed : v0.10.33
vagrant@box:~$ node -v
v0.10.25
vagrant@box:~$ npm -v
1.3.10
我需要做些什么来将npm更新到最新版本?
最佳解决思路
我仍然不明白为什么,但我必须运行npm install -g npm
两次才能获得理想的效果:
vagrant@box:~$ npm -v
1.3.10
vagrant@box:~$ sudo npm install -g npm
npm http GET https://registry.npmjs.org/npm
npm http 200 https://registry.npmjs.org/npm
npm http GET https://registry.npmjs.org/npm/-/npm-2.1.12.tgz
npm http 200 https://registry.npmjs.org/npm/-/npm-2.1.12.tgz
/usr/local/bin/npm -> /usr/local/lib/node_modules/npm/bin/npm-cli.js
npm@2.1.12 /usr/local/lib/node_modules/npm
vagrant@box:~$ npm -v
1.3.10
vagrant@box:~$ sudo npm install -g npm
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
npm@2.1.12 /usr/lib/node_modules/npm
vagrant@box:~$ npm -v
2.1.12
次佳解决思路
您可以使用npm本身,PPA或手动更新nodejs。
故宫:
检查您的当前版本:
node -v
以下内容将清除缓存。
sudo npm cache clean -f
安装n
sudo npm install -g n
你可以告诉它安装一个特定的版本,如下所示:
sudo n 0.8.11
或者告诉它安装最新的稳定版本。两者可能需要一段时间。
sudo n stable
要查看它是否实际升级,请运行:
node -v
PPA:
其他选项是通过PPA by chris-lea进行安装;
sudo add-apt-repository ppa:chris-lea/node.js
sudo apt-get update
sudo apt-get install nodejs
此PPA支持以下发行版:Utopic(14.10),Trusty(14.04),Saucy(13.10),Raring(13.04),Quantal(12.10),Precise(12.04),Oneiric(11.10),Natty(11.04),Lucid(10.04 )。
手动:
您可以随时通过手动downloading更新最新版本并自行安装!
参考:
第三种解决思路
当您第一次执行npm install -g npm
时,shell(Bash)将在您的路径中搜索npm
,找到由系统软件包安装的/usr/bin/npm
,然后使用它来安装新版本的npm
。新版本将安装在/usr/local/bin/npm
中。
现在,你的路径应该有/usr/local/bin/
/usr/bin/
之前,所以你会认为它现在将拿起/usr/local/bin/
的更新版本,对吧?错误。
Bash会在第一次搜索CACHE可执行文件路径后进行搜索,所以当您第二次说npm
时,它仍然使用/usr/bin/npm
首次发现的缓存版本。
要告诉Bash清除这个缓存并再次查看路径,您必须执行hash -r
。
安装npm
并执行此操作后,我的shell就可以很好地获取新版本的npm
。
谢谢
第四种思路
在一个命令中将NPM更新为最新版本
要升级或更新您的npm版本,只需输入终端:
sudo npm install npm@latest -g
正如NPM documentation的页脚中提到的那样
第五种思路
大多数情况下,我无法使用全局命令对其进行升级。然而,对我而言,是从所有系统node-modules的源码升级软件包:
找出npm的安装位置并进入该文件夹
#Below command shows the destination (remove sed pipe to see the full path of npm-cli)
whereis npm | cut -c 6- | xargs readlink -f | sed 's/.\{19\}$//'
#Go in there and install it manually. In my case it was the folder below...
cd /usr/lib
sudo npm install npm@latest
看看每个人(尤其是懒惰的人)强大的one-liner
cd `whereis npm | cut -c 6- | xargs readlink -f | sed 's/.\{18\}$//'`; cd ..; sudo npm install npm@latest
参考资料