获取 npm:找不到命令。已安装 Node 时如何重新安装 NPM? NPM 去哪儿了?

Posted

技术标签:

【中文标题】获取 npm:找不到命令。已安装 Node 时如何重新安装 NPM? NPM 去哪儿了?【英文标题】:Getting npm: command not found. How do I reinstall NPM when Node is already installed? Where did NPM go? 【发布时间】:2014-08-14 05:25:37 【问题描述】:

我开始 Learn to Build Modern Web Apps with the AngularJS Tutorial 并很早就遇到问题。

我已经安装了节点:

/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。]

我的理解是安装 Node 时会安装 NPM,所以我的第二个问题是:我如何只重新安装 NPM?我宁愿不必从头重新安装 Node。

[编辑:感谢@hawk 和@try-catch-finally - 似乎单独安装 NPM 不是一个选项,但有 easy ways to reinstall both.]

【问题讨论】:

我认为不可能。唯一可能的答案是完全重新安装节点。 @hawk 谢谢。真可惜。很高兴能弄清楚这种情况是如何发生的以及为什么会发生,这样我以后就可以避免它了。 你为什么把普通用户和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 家伙更新了仓库中不存在的依赖项(我遇到了这样的问题)。 @Rotimi:+1 用于找出将来避免它的原因!不幸的是,如果确实出现了问题,您将需要重新安装 t0,然后尝试重现您同时观察系统的步骤。 :/ -- 你是否使用./configure; make; make install 自己构建了node + npm?谁拥有/usr/local/bin/npmroot.root? find /usrfind 和路径之间的空格)!请在你的脑海中飞翔;)也请发出whereis nodewhereis npm 以显示提供nodenpm 的所有路径。 --- 请通过编辑将您的观察添加到您的帖子中! 【参考方案1】:
    如果有工作节点,可以重新安装npm

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

    很遗憾,npm update -g 没有达到任何人的预期。解决此问题已在 npm 路线图中,但需要一段时间。

    您几乎不需要全局安装包,除非(如generator-angulargrunt-cli)您想将该包用作命令。

【讨论】:

【参考方案2】:

以防万一您使用 brew 完成了此操作,我推荐 github 上的这篇文章。将为您节省大量时间。

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

为 Homebrew 用户修复 Mac OS X 上的 npm 运行以下命令删除所有现有的全局 npm 模块,卸载 node 和 npm,使用正确的默认值重新安装 node,将 npm 安装为自己的 pacakge,并配置要安装的全局 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"

【讨论】:

虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review @ValentinLorentz 我很抱歉,有更新。让我知道它是否看起来不错。【参考方案3】:

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

    npm install npm@latest -g

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

    yum reinstall npm

我希望这可以帮助 redhat/centos 用户。

【讨论】:

以上是关于获取 npm:找不到命令。已安装 Node 时如何重新安装 NPM? NPM 去哪儿了?的主要内容,如果未能解决你的问题,请参考以下文章

使用npm成功安装命令后,执行时却报找不到命令的问题

关于使用npm成功安装命令后,执行时却报找不到命令的问题

node.js安装后可以使用,关机再开在使用语法就找不到了

Ec2 sudo 运行 npm或node时,出现找不到命令

NPM:如何获取 ./node_modules/.bin 文件夹?

宝塔找不到node