获取 npm 命令未找到。当 Node 已安装时,如何重新安装 NPM?NPM 去哪里了?

18

我正在开始学习使用AngularJS教程“学习构建现代Web应用程序”,但是很早就遇到了问题。

我已经安装了node:

/path/ang-news node -v
v0.10.26

我之前一直在使用NPM,但是在使用Yeoman时出现了问题。我曾经重复了这些步骤,但是Grunt停止工作了,所以我重新开始了。

我运行了:

$ sudo npm install -g generator-angular

所有的依赖都在安装,直到我收到以下信息:

npm WARN package.json mongo@0.1.0 No repository field.
npm ERR! peerinvalid The package generator-karma does not satisfy its siblings' peerDependencies requirements!
npm ERR! peerinvalid Peer generator-angular@0.9.1 wants generator-karma@>=0.8.2

我随后尝试进行更新:

$ npm update -g

我应该以管理员身份运行此程序。我收到了许多错误消息,这似乎是最相关的:

npm ERR! Please try running this command again as root/Administrator.

npm ERR! System Darwin 13.1.0
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "update" "-g"
npm ERR! cwd /path/ang-news
npm ERR! node -v v0.10.26
npm ERR! npm -v 1.4.3

npm ERR! not ok code 0

然后我尝试卸载generator-karma并重新开始:

$ sudo npm uninstall -g generator-karma

但实际收到的是:

sudo: npm: command not found

$ npm -v
-bash: /usr/local/bin/npm: No such file or directory

我的第一个问题是:为什么NPM突然消失了?

[编辑:感谢 @try-catch-finally 指出在切换普通用户和使用sudo命令时会导致混乱。事实证明我搞砸了我的用户环境,NPM不再安装。]

我的理解是NPM是在安装Node时一起安装的,因此我的第二个问题是:如何仅重新安装NPM?我希望不必从头开始重新安装Node。

[编辑:感谢 @hawk 和 @try-catch-finally - 似乎没有单独安装NPM的选项,但有简单的方法可以同时重新安装两者。]


1
@hawk 谢谢。真遗憾。弄清楚这是如何发生的以及为什么发生,这样我将来就可以避免了,那会很棒。 - Rotimi
2
你为什么混淆了普通用户和root用户的命令?像你写的 $ npm update -g 看起来是错误的,如果你要处理全局包,你也需要以root身份运行此命令。有趣的是:你接着使用了 sudo 但又执行了另一个 npm 命令。也许你搞乱了用户环境?请检查一下 /usr/local/bin/npm 是否真的不存在?请尝试执行 find /usr 命令。关于原始错误 Peer generator-angular@0.9.1 wants generator-karma@>=0.8.2:看起来 generator-angular 的开发人员更新了依赖项,但这些依赖项在存储库中不存在(我也遇到过这样的问题)。 - try-catch-finally
@try-catch-finally 我因为新手和心不在焉而混淆了普通用户和root的命令 :).$ find/usr npm -bash: find/usr: No such file or directory`很高兴知道我不是唯一遇到更新依赖项不在存储库中的问题的人。谢谢! - Rotimi
1
@Rotimi:发现原因并避免以后出现这种情况,点赞!不幸的是,如果出现了严重问题,您需要重新安装,然后在观察系统的同时尝试重现您的步骤。 :/ -- 您是否使用./configure; make; make install自己构建了node + npm?谁拥有/usr/local/bin/npmroot.root - try-catch-finally
1
请注意,find /usr中的find和路径之间有一个空格!请在脑海中飞行 ;) 请同时发出whereis nodewhereis npm以显示提供nodenpm的所有路径。 - try-catch-finally
显示剩余2条评论
3个回答

41
  1. 如果您有一个可用的node,您可以重新安装npm

curl -L https://npmjs.org/install.sh | sudo sh

  1. 不幸的是,npm update -g并不像任何人预期的那样工作。修复这个问题在npm的路线图上,但需要一些时间。

  2. 除非(如generator-angulargrunt-cli)要将该软件包用作命令,否则几乎不需要全局安装软件包。


4

如果你使用brew进行操作,我建议你参考这篇github上的文章,将为你节省大量时间。

https://gist.github.com/DanHerbert/9520689

修复Mac OS X上Homebrew用户的npm问题。运行以下命令以删除所有现有的全局npm模块,卸载node和npm,重新安装具有正确默认值的node,将npm作为独立包安装,并配置全局npm模块的安装位置。

rm -rf /usr/local/lib/node_modules
brew uninstall node
brew install node --without-npm
echo prefix=~/.node >> ~/.npmrc
curl -L https://www.npmjs.com/install.sh | sh

在此时,Node和npm应该已经正确安装。最后一步是将~/.node/bin添加到您的PATH中,以便全局安装的命令可以使用。我将此行添加到了我的~/.path脚本中,并通过~/.bash_profile运行。按如下方式直接运行以下行。

export PATH="$HOME/.node/bin:$PATH"

虽然这个链接可能回答了问题,但最好在此处包含答案的基本部分并提供参考链接。如果链接页面更改,仅链接的答案可能会失效。- 来自审查 - Valentin Lorentz
@ValentinLorentz 对不起,这是更新。如果看起来不错,请告诉我。 - alphapilgrim

0

在执行安装最新版本的npm命令后,我在redhat 7.1上遇到了完全相同的问题:

    npm install npm@latest -g

经过一些尝试,我找到了解决方案:

    yum reinstall npm

我希望这可以帮助红帽 / CentOS 用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接