【问题标题】:Why does npm install say I have unmet dependencies?为什么 npm install 说我有未满足的依赖项?
【发布时间】:2014-01-12 22:21:41
【问题描述】:

我有一个节点包。当我从包根目录运行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 到底做了什么感到困惑。如果它检测到依赖项,不应该安装它吗?在什么情况下它会给我这样的错误消息,我该如何解决依赖关系?

【问题讨论】:

    标签: node.js dependencies npm


    【解决方案1】:

    我相信是因为依赖解析有点破,见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 之前,执行以下步骤可能会有所帮助:

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

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

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

    【讨论】:

    • 删除节点模块并清理缓存使其对我有用。
    • 删除“node_modules”,运行“npm cache clean”,然后运行“npm install”解决了我的问题。我不得不运行 'npm_install' 三次,直到我加载所有依赖项而没有错误。
    • 如果npm cache clean 因访问原因无法使用,请尝试sudo npm cache clean
    • @Soroush 盲目地将 sudo 添加到无法正常工作的东西并不能神奇地修复它们,只是意味着你不知道发生了什么。
    • 为什么 npm 的其他“解决方案”包括 rm r node_modules?为什么在大多数情况下这确实是唯一的选择?这不是我认为包管理器应该像这样工作的方式
    【解决方案2】:

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

    【讨论】:

    • 试试npm cache clean
    • 可能不需要重新安装节点,但在这样做之间,npm cache clean 和删除 node_modules,这个建议对我有用。
    • @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 第一层。
    【解决方案3】:

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

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

    完成了!

    【讨论】:

    • 运行 sudo npm update -g npm 后,我的 npm 变得无用,任何安装任何东西的尝试都会导致“npm ERR!找不到模块'read-package-json'”我必须对此投反对票
    • 它对我和其他人都有效,也许你还有其他问题。尝试全局安装模块 read-package-json sudo npm install -g read-package-json 或者重新安装你的 npm
    • 警告:你不应该使用 sudo 和 npm,建议改为更改 npm 想要写入的目录的权限或所有权。
    • 可能也想在其中添加“npm cache clean”
    • 不要在 npm 中使用 sudo
    【解决方案4】:

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

    【讨论】:

    • 我在 CentOS 7 存储库中分发的 npm 版本遇到了同样的问题。我从 node.js 安装了最新的 npm 版本,问题消失了,所以我认为你的权利,这可能是旧版本的问题。
    【解决方案5】:

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

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

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

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

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

    【讨论】:

    • 这有助于我和我的主机重定向流量。
    • @dimgl 很高兴知道 :)
    • @Dejel 您是否也尝试过其他答案。您可能需要多次运行npm install 和/或手动安装一些节点包。
    【解决方案6】:

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

    祝你好运。

    【讨论】:

    • 给我留下同样的错误,包括一个新的错误:ERR! code 1
    • @WouterVanherck 你能试试rm -rf node_modules,然后是npm cache cleannpm install。如果还是不行,我建议你再rm -rf node_modules,然后npm i -g yarn,然后yarn installYarn 很好管理 node_modules。祝你好运。
    • 是的,这就是peerDependencies 的用途。促使您有意识地选择版本。
    【解决方案7】:

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

    例如:

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

    【讨论】:

      【解决方案8】:

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

      npm update -g

      之后就可以安装包了。

      【讨论】:

        【解决方案9】:

        这为我解决了:

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

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

        【讨论】:

          【解决方案10】:

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

          请注意,在 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 标志是干什么用的?
          【解决方案11】:

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

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

          【讨论】:

            【解决方案12】:

            我正在尝试开发一个运行 npm install 的自动化部署系统,因此这些解决方案中的很多在自动化模式下都不适合我。我无法删除/重新创建 node_modules/,也无法轻松更改 Node.js 版本。

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

            【讨论】:

              【解决方案13】:

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

              【讨论】:

                【解决方案14】:

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

                sudo npm install -g npm
                

                【讨论】:

                  【解决方案15】:

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

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

                  【讨论】:

                    【解决方案16】:

                    请注意您的 Angular 版本,如果您在 Angular 2.x.x 下工作,那么您可能需要升级到 Angular 4.x.x

                    一些依赖需要 angular 4

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

                    【讨论】:

                      【解决方案17】:

                      更新到 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';.
                      

                      【讨论】:

                        猜你喜欢
                        • 2019-09-12
                        • 1970-01-01
                        • 2016-08-29
                        • 1970-01-01
                        • 2017-08-27
                        • 1970-01-01
                        • 2014-11-23
                        • 2020-09-11
                        相关资源
                        最近更新 更多