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

iRa*_*RaS 20 javascript 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 
Run Code Online (Sandbox Code Playgroud)

Xeo*_*eos 21

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

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

  • @Xeos 我如何_“强制决议为更新版本”_?我尝试“npm install”更新的软件包,但旧的主要版本仍然存在。 (2认同)

iRa*_*RaS 18

问题是深度。从文档:

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

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

npm update --depth 5
Run Code Online (Sandbox Code Playgroud)

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

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

例子:

改变这个:

      "dependencies": {
        "minimist": {
          "version": "1.2.0",
          "bundled": true,
          "dev": true,
          "optional": true
        }
      }
Run Code Online (Sandbox Code Playgroud)

对此:

      "dependencies": {
      }
Run Code Online (Sandbox Code Playgroud)

npm install再次运行。