首页 > 解决方案 > 如何使用 npm 更新依赖项的依赖项

问题描述

我很想知道我找不到这个简单问题的答案。我也很想知道这npm update不能解决这个问题。

我无法在此处发布完整的依赖关系树,但无论如何让我描述一下我的问题:

minimist 已过时(版本 1.2.0)并且在此版本中存在安全漏洞。软件包需要 minimist 将依赖项定义为 ^1.2.0 - 因此它与 1.2.2 兼容。

常见的解决方案是将其放入package.jsoninsidedevDependenciesdependencieswith ^1.2.2。我不想把它放进去package.json。我觉得npm update还应该更新间接依赖项。

我错过了什么吗?

在这里你可以看到我的 package-lock.json:https ://github.com/tflori/riki-community/blob/master/package-lock.json

和输出npm ls minimist

riki-community@ /home/iras/work/projects/riki/community
├─┬ awesome-typescript-loader@5.2.1
│ ├─┬ loader-utils@1.2.3
│ │ └─┬ json5@1.0.1
│ │   └── minimist@1.2.0  deduped
│ └─┬ mkdirp@0.5.1
│   └── minimist@0.0.8 
├─┬ jest@25.1.0
│ └─┬ @jest/core@25.1.0
│   ├─┬ @jest/transform@25.1.0
│   │ └─┬ @babel/core@7.8.7
│   │   └─┬ json5@2.1.2
│   │     └── minimist@1.2.5 
│   └─┬ jest-haste-map@25.1.0
│     └─┬ sane@4.1.0
│       ├─┬ @cnakazawa/watch@1.0.4
│       │ └── minimist@1.2.0  deduped
│       └── minimist@1.2.0  deduped
├─┬ node-sass@4.13.1
│ └─┬ meow@3.7.0
│   └── minimist@1.2.0 
├─┬ ts-jest@25.2.1
│ └─┬ json5@2.1.2
│   └── minimist@1.2.5 
├─┬ tsconfig-paths-webpack-plugin@3.2.0
│ └─┬ tsconfig-paths@3.8.0
│   └── minimist@1.2.0  deduped
└─┬ webpack@4.42.0
  └─┬ watchpack@1.6.0
    └─┬ chokidar@2.1.8
      └─┬ UNMET OPTIONAL DEPENDENCY fsevents@1.2.9
        └─┬ UNMET OPTIONAL DEPENDENCY node-pre-gyp@0.12.0
          ├─┬ UNMET OPTIONAL DEPENDENCY mkdirp@0.5.1
          │ └── UNMET OPTIONAL DEPENDENCY minimist@0.0.8 
          └─┬ UNMET OPTIONAL DEPENDENCY rc@1.2.8
            └── UNMET OPTIONAL DEPENDENCY minimist@1.2.0 

标签: javascriptnpm

解决方案


问题在于深度。从文档中:

从 npm@2.6.1 开始,npm 更新将只检查顶级包。以前版本的 npm 也会递归地检查所有依赖项。要获得旧行为,请使用 npm --depth 9999 update。

所以我们必须提供我们想要更新的深度。在我的情况下,9999 花了很长时间,我取消了它。但是一个--depth 5就足够了。

npm update --depth 5

如果那仍然没有更新依赖关系,那么您必须手动更改package-lock.json.

打开package-lock.json并查找所有出现"minimist": {的对象并删除该对象。

例子:

改变这个:

      "dependencies": {
        "minimist": {
          "version": "1.2.0",
          "bundled": true,
          "dev": true,
          "optional": true
        }
      }

对此:

      "dependencies": {
      }

npm install再次运行。


推荐阅读