为什么npm安装说我有未满足的依赖?

我有一个节点包。当我从包根运行npm install时,它安装了一堆东西,但随后打印了几条错误消息,看起来像这样:

npm WARN unmet dependency /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob需要grace -fs@'~1.2.0'但会加载

我一定对npm install到底做什么感到困惑。如果它检测到依赖项,难道不应该安装它吗?在什么情况下它会给我这样的错误消息,我如何解决依赖关系?

306674 次浏览

我相信这是因为依赖解析有点坏,见https://github.com/npm/npm/issues/1341#issuecomment-20634338

以下是可能的解决方案:

  1. 手动安装顶级模块,包含未满足的依赖项: 李npm install findup-sync@0.1.2 < / p > < / >

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

  3. 重新运行npm install命令。

这个问题可能是由于npm由于超时或其他原因无法下载所有的包引起的。

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

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

  • 使用rm -rf node_modules/删除node_modules
  • 运行npm cache clean
为什么' remove node_modules'有时是必要的? 当嵌套模块在npm install期间安装失败时,后续的npm install将不会检测到那些缺失的嵌套依赖项。< / p >

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

它发生在我身上,当WIFI在npm install中宕机。删除node_modules并重新运行npm install修复了它。

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

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

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

注意,这将通过不安全的HTTP连接来拉节点模块。

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

将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的更有效的方法。

类似的事情,我想再加一步。

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

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

然后尝试:

npm install --dev
npm update --dev

这至少可以解决递归依赖项解析。

——dev递归地安装devDependencies(并且它永远运行..) 它如何帮助解决版本差异?< / p >

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

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

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

这是完成了!

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

npm update -g

然后就能安装这个包了。

我试图在一个运行npm install的自动化部署系统上工作,所以很多这些解决方案不会以自动化的方式为我工作。我不能删除/重新创建node_modules/,也不能轻易更改Node.js版本。

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

对于每一个-- UNMET PEER DEPENDENCY,例如-- UNMET PEER DEPENDENCY rxjs@5.0.0-rc.2,将依赖项与npm install --save rxjs@5.0.0-rc.2一起安装,直到没有任何UNMET DEPENDENCIES为止。

祝你好运。

这为我解决了问题:

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

重复这些步骤,直到不再出现错误。

我在安装react包时遇到了这个问题,这对我来说是有效的: npm install --save <package causing this error> < / p >

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

有些依赖需要angular 4

这是一个关于如何安装angular 4或更新你的项目的教程

在我的例子中,更新npm解决了这个问题。

sudo npm install -g npm

更新至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命令,一切都应该正常工作。

如果你依赖动画,从根目录NgModule中的@angular/platform-browser/animations导入新的BrowserAnimationsModule。如果没有这一点,您的代码将编译和运行,但动画将触发一个错误。@angular/core中的导入已弃用,请使用新包中的导入

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

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

例如:

< p > ├── UNMET DEPENDENCY css-loader@^0.23.1 < br > npm install css-loader@^0.23.1 < / p >

npm install将安装来自npm-shrinkwrap.json的所有包,但可能会忽略package.json中的包,如果它们没有在前者中预先设置。

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