npm
我在设置 Vagrant 框时遇到了问题。我注意到npm
版本有点旧,所以我想用最新版本检查一下问题。
据我了解,您应该能够npm
使用进行更新npm install -g 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
[email protected] /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
[email protected] /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 更新到最新版本?
答案1
我还是不明白为什么但我得跑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
[email protected] /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
[email protected] /usr/lib/node_modules/npm
vagrant@box:~$ npm -v
2.1.12
答案2
当你第一次执行 时npm install -g npm
,shell(Bash)会npm
在你的路径中搜索 ,找到/usr/bin/npm
系统安装的包,然后使用它来安装 的新版本npm
。新版本将安装在 中/usr/local/bin/npm
。
现在,你的路径应该有/usr/local/bin/
BEFORE /usr/bin/
,所以你会认为它现在会获取 中的更新版本/usr/local/bin/
,对吗?错了。
Bash 将在第一次搜索可执行路径后将其缓存 (CACHE),因此当您npm
第二次搜索时,它仍将使用第一次找到的缓存版本/usr/bin/npm
。
要告诉 Bash 清除此缓存并再次查看路径,您必须执行hash -r
。
安装npm
并执行这些操作后,我的 shell 就可以正常接收新版本了npm
。
谢谢
答案3
您可以使用 npm 本身、PPA 或手动来更新 nodejs。
npm:
检查当前版本:
node -v
下面的操作会清除你的缓存。
sudo npm cache clean -f
安装n
sudo npm install -g n
您可以告诉它安装特定版本,如下所示:
sudo n 0.8.11
或者直接告诉它安装最新的稳定版本。这两种方法都可能需要一段时间。
sudo n stable
要查看它是否实际升级,请运行:
node -v
电力供应协议:
其他选项是通过Chris-lea 的 PPA;
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)。
手动:
您可以随时通过手动方式更新下载最新版本并自行安装!
参考:
答案4
大多数时候我无法使用全局命令来升级它。不过,对我有用的是从所有系统节点模块的源升级包:
找出 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...
# NOTE: on mac its in /usr/local/lib
cd /usr/lib
sudo npm install npm@latest
以下是对所有人(尤其是懒人)有用的妙语
cd `whereis npm | cut -c 6- | xargs readlink -f | sed 's/.\{18\}$//'`; cd ..; sudo npm install npm@latest