关于node.js:为什么npm install说我有未满足的依赖项?

Why does npm install say I have unmet dependencies?

我有一个节点包。当我从包根目录运行npm install时,它会安装一堆东西,但随后会打印如下几条错误消息:

npm WARN unmet dependency /Users/seanmackesey/google_drive/code/explore/generator/node_modules/findup-sync/node_modules/glob requires graceful-fs@'~1.2.0' but will load

我一定很困惑npm install到底做了什么。如果它检测到依赖项,是否应该安装它?在什么情况下,它会给我这样的错误消息,以及如何解决依赖关系?


我认为这是因为依赖解析有点不完善,请参阅https://github.com/isaacs/npm/issues/1341 issuecomment-20634338

以下是可能的解决方案:

  • 需要手动安装顶级模块,其中包含未设置的依赖项:npm安装findup同步@0.1.2

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

  • 重新运行"npm install"命令。

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

    注意:您也可以使用npm install findup [email protected]手动安装失败的软件包。

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

    • 使用rm-rf node_模块移除node_模块/
    • 运行NPM缓存清除

    为什么有时需要"删除节点模块"?当一个嵌套模块在NPM安装期间无法安装时,后续的NPM安装将不会检测到那些丢失的嵌套依赖项。

    如果是这样的话,有时就足够删除那些丢失的嵌套模块的顶层依赖关系,并再次运行NPM安装。见


    在一次npm install的时候,WiFi掉了,这发生在我身上。移除node_modules并重新运行npm install将其修复。


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

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

    完成了!


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


    即使删除了node_modules目录,上述答案也没有完全帮助我。

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

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

    注意,这会将节点模块拉到不安全的HTTP连接上。

    来源:https://stackoverflow.com/a/13119867/4082503


    对于每个-- UNMET PEER DEPENDENCY,对于例如-- UNMET PEER DEPENDENCY [email protected],安装与npm install --save [email protected]的依赖项,直到不再有UNMET DEPENDENCIES为止。

    祝你好运。


    这为我解决了问题:

  • 根据错误更正package.json中的版本号;
  • 取下node_modules(rm -rf node_modules);
  • 重新运行npm install
  • 重复这些步骤,直到不再有错误。


    一些类似的事情,我会加上另一个步骤。

    请注意,在NPM版本>1.4.9的情况下,"NPM安装"会安装devdependencies。首先尝试删除现有模块和缓存:

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

    然后尝试:

    1
    2
    npm install --dev
    npm update --dev

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


    --dev递归安装devdependencies(及其永久运行..)如何帮助解决版本差异?

    您可以尝试删除node_modules文件夹,然后清理NPM缓存,然后再次运行"NPM I"。


    我试图在一个运行npm install的自动部署系统上工作,所以很多这些解决方案在自动模式下都不适合我。我无法删除/重新创建node_modules/,也无法轻松更改node.js版本。

    所以我最终运行了npm shrinkwrap—将npm-shrinkwrap.json文件添加到我的部署包中,并从中运行安装程序。这为我解决了问题;使用收缩包装文件作为"助手",NPM似乎能够找到正确的包并为我安装它们。(包覆面提取还具有其他功能,但这正是我在这种特定情况下需要的功能)。


    我在安装React软件包时遇到了这个问题,这对我很有用:npm install --save


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

    1
    sudo npm install -g npm

    我运行npm list并安装所有列为未满足依赖项的包。

    例如:

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


    我在安装react native cli时遇到了类似的问题。我不知道在阅读了这里的答案之后,我应该删除哪个/node_modules目录。我终于跑了

    npm update -g

    之后就可以安装软件包了。


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

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


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

    有些依赖关系需要角度4

    下面是如何安装Angular4或更新项目的教程。


    更新到4.0.0

    更新到4和将角度依赖项更新到最新版本一样简单,如果您想要动画,请重新检查。这对大多数用例都有效。

    Linux/MAC:

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

    在Windows上:

    1
    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进口,使用新包装的进口。

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