如何使用 npm 更新依赖项的依赖项

新手上路,请多包涵

我很奇怪我找不到这个简单问题的答案。我也很奇怪 npm update 没有解决这个问题。

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

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

常见的解决方案是将其放在 package.json dependencies ^1.2.2 devDependencies 我不想把它放进 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

原文由 iRaS 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 929
2 个回答

问题是深度。从文档中:

从 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

原文由 iRaS 发布,翻译遵循 CC BY-SA 4.0 许可协议

从 npm v7.0.0 ,运行 npm update 将始终更新 所有包,而不仅仅是根目录中指定的包 package.json NPM 已从--- npm update 命令中删除 --depth 选项并更改其行为。

注意:仍有可能某些底层包将过时版本指定为依赖项,这将阻止 npm update 安装最新版本。除了强制解决更新版本之外,您没有太多选择。

原文由 Xeos 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题