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

时间:2013-12-24 17:49:30

标签: node.js dependencies npm

我有一个节点包。当我从包根运行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究竟是什么感到困惑。如果它检测到依赖关系,不应该安装它吗?在什么条件下它会给我这样的错误消息,以及如何解决依赖关系?

17 个答案:

答案 0 :(得分:387)

我认为这是因为依赖性解决方案有点破碎,请参阅https://github.com/isaacs/npm/issues/1341#issuecomment-20634338

以下是可能的解决方案:

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

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

  3. 重新运行'npm install'命令。

  4. 问题可能是由于npm由于超时或其他原因导致无法下载所有程序包而导致的。

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

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

    • 使用rm -rf node_modules /
    • 删除node_modules
    • 运行npm cache clean

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

    如果是这种情况,有时删除那些缺少嵌套模块的顶级依赖关系,并再次运行npm install就足够了。见

答案 1 :(得分:80)

npm install期间WIFI发生故障时,我发生了这种情况。正在删除node_modules并重新运行npm install修复它。

答案 2 :(得分:34)

我使用这些命令行解决了这个问题

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

已经完成了!

答案 3 :(得分:11)

将NPM升级到最新版本可以极大地帮助解决这个问题。 dule上面的答案是正确的,说依赖管理有点破,但似乎这主要是针对旧版本的npm。

命令npm list为您提供所有已安装node_modules的列表。当我从版本1.4.2升级到版本2.7.4时,之前标记为WARN unmet dependency的许多模块不再被注明。

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

答案 4 :(得分:9)

即使删除node_modules目录,上述答案也无法完全帮助我。

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

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

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

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

答案 5 :(得分:3)

对于每个-- UNMET PEER DEPENDENCY,例如。 -- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2,使用npm install --save rxjs@5.0.0-rc.2安装该依赖项,直到您不再拥有UNMET DEPENDENCIES

祝你好运。

答案 6 :(得分:2)

这解决了我:

  1. 根据错误更正package.json中的版本号;
  2. 删除node_modulesrm -rf node_modules);
  3. 重新运行npm install
  4. 重复这些步骤,直到没有错误为止。

答案 7 :(得分:1)

我正在努力开发一个运行npm install的自动部署系统,所以很多这些解决方案对我来说都不适合自动化。我无法删除/重新创建node_modules/,也无法轻松更改Node.js版本。

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

答案 8 :(得分:1)

我运行MinGW GCC并安装了所有列为UNMET DEPENDENCY

的软件包

例如:

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

答案 9 :(得分:1)

就我而言,npm的更新解决了它。

sudo npm install -g npm

答案 10 :(得分:1)

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

答案 11 :(得分:1)

我在安装React Native CLI时遇到了类似的问题。在阅读完这里的答案之后,我不确定我应该删除哪个/node_modules目录。我最终只是跑了

npm update -g

之后能够安装包。

答案 12 :(得分:1)

- dev递归安装devDependencies(并且它永远运行..) 它如何帮助解决版本差异?

您可以尝试删除node_moduls文件夹,然后清除npm缓存,然后运行&#39; npm i&#39;再次

答案 13 :(得分:1)

有些事情在类似的情况下,我会再添加一步。

请注意,在npm版本&gt; 1.4.9,'npm install'确实安装了devDependencies。首先尝试删除现有模块和缓存:

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

然后尝试:

npm install --dev
npm update --dev

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

答案 14 :(得分:0)

如果你在角度2.x.x下工作,请注意你的角度版本,所以你可能需要升级到角度4.x.x

某些依赖项需要角度4

Here is a tutorial for how to install angular 4 or update your project.

答案 15 :(得分: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

然后运行你通常使用的任何服务或npm启动命令,一切都应该有效。

如果您依赖动画,请从根BrowserAnimationsModule中的@angular/platform-browser/animations导入新的NgModule。如果没有这个,您的代码将编译并运行,但动画将触发错误。不推荐使用@angular/core中的导入,使用新包中的导入

import { trigger, state, style, transition, animate } from '@angular/animations';.

答案 16 :(得分:0)

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

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