为什么npm install说我有未满足的依赖关系?


404

我有一个节点包。当我npm install从软件包根目录运行时,它会安装很多东西,但随后会打印出一些如下所示的错误消息:

npm WARN未满足依赖项/ Users / seanmackesey / google_drive / code / explore / generator / node_modules / findup-sync / node_modules / glob需要graceful-fs@'~1.2.0'但会加载

我一定对确切的npm install功能感到困惑。如果它检测到依赖性,是否应该安装它?在什么情况下会给我这样的错误消息,我该如何解决依赖关系?

Answers:


397

我相信这是因为依赖项解析有点中断,请参阅https://github.com/npm/npm/issues/1341#issuecomment-20634338

以下是可能的解决方案:

  1. 手动需要安装包含未满足的依赖项的顶级模块: npm install findup-sync@0.1.2

  2. 重新组织package.json。将所有高级模块(作为其他模块的依赖项)放在底部。

  3. 重新运行npm install命令。

该问题可能是由于超时或其他原因导致npm无法下载所有软件包所致。

注意:您也可以使用手动安装失败的软件包npm install findup-sync@0.1.2

在运行之前npm install,执行以下步骤可能会有所帮助:

  • 使用以下方法删除node_modules rm -rf node_modules/
  • npm cache clean

为什么有时需要“删除node_modules”?如果在期间无法安装嵌套模块npm install,则后续模块npm install将不会检测到那些缺少的嵌套依赖项。

如果是这种情况,有时只需删除那些缺少的嵌套模块的顶级依赖关系,然后npm install重新运行即可。看到


22
删除节点模块并清理缓存使其对我有用。
MarkoHiel 2014年

4
删除“ node_modules”,运行“ npm cache clean”,然后运行“ npm install”解决了我的问题。我必须运行'npm_install'三次,直到我加载所有依赖项而没有错误。
hendrix 2014年

2
如果npm cache clean由于访问原因不起作用,请尝试sudo npm cache clean
Soroush

12
@Soroush盲目地将sudo添加到无法正常工作的东西并不能神奇地修复它们,只是意味着您不知道发生了什么。
Edgar Aroutiounian

5
为什么npm的其他“解决方案”都包含rm r node_modules?为什么在大多数情况下这实际上是唯一的选择?那并不是我认为包裹管理器应该如何工作
phil294 '17

83

在WIFI期间WIFI掉线的时候我发生了npm install。删除node_modules并重新运行npm install修复它。


26
试一试npm cache clean
ijse 2014年

5
重新安装节点可能不是必需的,但是在这样做npm cache clean和删除之间node_modules,该建议对我有用。
RichLitt 2014年

@RichLitt,是的npm cache clean,这对我来说还不够,node_modules在“安装”期间网络出现故障后,我还必须将其移除以使其正常工作。
马克汤姆林

我对node_modules要删除的目录感到困惑?我的错误也有类似的问题/usr/local/lib/node_modules/npm/node_modules/read-installed/node_modules/readdir-scoped-modules requires graceful-fs@'^4.1.2'
wuliwong

1
@wuliwong最高一级。
geon

33

我通过使用以下命令行解决了该问题

  • $ rm -rf node_modules/
  • $ sudo npm update -g npm
  • $ npm install

完成!


5
运行sudo npm update -g npm后,我的npm变得无用,任何尝试安装任何东西的结果都会导致“ npm ERR!找不到模块'read-package-json'”,我将不得不对此表示否决
MichaelB

它对我和其他人都有用,也许您还有其他问题。尝试全局安装模块read-package-json sudo npm install -g read-package-json或重新安装您的npm
zatamine

8
警告:不应将sudo与一起使用npm,建议改为更改npm也要写入的目录的权限或所有权。
Sgnl

1
可能也想在其中添加“ npm cache clean”
Alexander Mills

1
不要使用sudo与NPM
格兰特

11

将NPM升级到最新版本可以大大帮助您。dule在上面的回答中可以正确地说依赖性管理有点破损,但是似乎这主要是针对npm的较旧版本。

该命令npm list为您提供了所有已安装的列表node_modules。当我从1.4.2版本升级到2.7.4版本时,以前标记过的许多模块WARN unmet dependency不再被这样指出。

要更新npm,您应该npm install -g npm在MacOSX或Linux上键入。在Windows上,我发现重新下载并重新运行nodejs安装程序是更新npm的更有效方法。


我在CentOS 7存储库中分发的npm版本也遇到了同样的问题。我从node.js安装了最新的npm版本,问题消失了,所以我认为您是正确的,这可能是旧版本的问题。
Elouan Keryell-Even'1

9

上面的答案甚至在删除node_modules目录后也没有完全帮助我。

下面的命令终于帮助了我:

npm config set registry http://registry.npmjs.org/

请注意,这会通过不安全的HTTP连接拉动节点模块。

Src:https//stackoverflow.com/a/13119867/4082503


这和我的主机重定向流量一样对我有所帮助。
dimiguel 2014年

1
@dimgl很高兴知道:)
Vinay Vemula

1
@Dejel您是否也尝试了其他答案。您可能必须npm install多次运行和/或手动安装一些节点软件包。
Vinay Vemula 2014年

4

对于每个-- UNMET PEER DEPENDENCY,对于。-- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2,安装依赖,npm install --save rxjs@5.0.0-rc.2直到没有了UNMET DEPENDENCIES

祝好运。


1
给我留下了相同的错误,包括一个新错误:ERR! code 1
Wouter Vanherck

1
@WouterVanherck能不能请你rm -rf node_modules,然后npm cache cleannpm install。如果仍然无法正常工作,我建议您rm -rf node_modules再按npm i -g yarn,然后再按yarn install纱线管理起来很好node_modules。祝好运。
Akash

1
是的,这peerDependencies是为了什么。使您有意识地选择版本。
卡马菲瑟

3

我运行npm list并安装了列为UNMET DEPENDENCY的所有软件包

例如:

├── UNMET DEPENDENCY css-loader@^0.23.1
npm install css-loader@^0.23.1


2

这为我解决了:

  1. package.json根据错误更正中的版本号;
  2. 删除node_modulesrm -rf node_modules);
  3. 重新运行npm install

重复这些步骤,直到没有更多错误为止。


1

类似的事情,我会再增加一个步骤。

请注意,在npm版本> 1.4.9上,“ npm install”确实会安装devDependencies。首先尝试删除现有模块和缓存:

remove node_modules $ rm -rf node_modules/
run $ npm cache clean

然后尝试:

npm install --dev
npm update --dev

这至少将解决递归依赖性解析。


6
--dev标志是什么?
亚历山大·米尔斯

1

--dev以递归方式安装devDependencies(并永久运行..)如何帮助解决版本差异?

您可以尝试删除node_moduls文件夹,然后清理npm缓存,然后再次运行'npm i'


1

我在安装React Native CLI时遇到了类似的问题。/node_modules阅读此处的答案后,我不确定应该删除哪个目录。我终于跑了

npm update -g

并能够在此之后安装该软件包。


1

我试图在运行的自动部署系统上工作npm install,因此许多解决方案在自动化方面对我不起作用。我无法删除/重新创建,node_modules/也无法轻松更改Node.js版本。

因此,我最终运行npm shrinkwrap-将npm-shrinkwrap.json文件添加到我的部署包中,然后从那里运行安装。那为我解决了问题;使用收缩包装文件作为“帮助器”,npm似乎能够找到合适的软件包并为我安装了它们。(收缩包装还具有其他功能,但这是我在特定情况下所需的功能)。


1

我在安装React软件包时遇到了这个问题,这对我有用: npm install --save <package causing this error>



1

npm install将安装中的所有软件包npm-shrinkwrap.json,但package.json如果未在中预先设置,则可能会忽略中的软件包。

如果您的项目有个npm-shrinkwrap.json,请确保您npm shrinkwrap每次添加添加/删除/更改时都运行以重新生成它package.json



0

更新到4.0.0

更新到4就像将Angular依赖项更新到最新版本一样容易,并仔细检查是否需要动画。这将适用于大多数用例。

在Linux / Mac上:

npm install @angular/{common,compiler,compiler-cli,core,forms,http,platform-browser,platform-browser-dynamic,platform-server,router,animations}@latest typescript@latest --save 

在Windows上:

npm install @angular/common@latest @angular/compiler@latest @angular/compiler-cli@latest @angular/core@latest @angular/forms@latest @angular/http@latest @angular/platform-browser@latest @angular/platform-browser-dynamic@latest @angular/platform-server@latest @angular/router@latest @angular/animations@latest typescript@latest --save

然后运行您通常使用的任何ng serve或npm start命令,一切都会正常进行。

如果您依赖动画,请BrowserAnimationsModule@angular/platform-browser/animationsroot 导入新的动画NgModule。否则,您的代码将编译并运行,但是动画将触发错误。进口@angular/core被弃用,新包使用进口

import { trigger, state, style, transition, animate } from '@angular/animations';.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.