如何使用npm更新依赖关系的依赖关系

时间:2020-03-17 09:23:44

标签: javascript npm

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

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

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

常见的解决方案是将其放入package.json内的devDependenciesdependencies中的^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 

4 个答案:

答案 0 :(得分:8)

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

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

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

npm update --depth 5

答案 1 :(得分:3)

我还需要将“ mkdirp”的依赖项的最低版本从“ 0.0.8”手动更改为“ ^ 1.2.5”

答案 2 :(得分:1)

在其他人这样做之前:当然有解决方法...

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

示例:

更改此:

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

对此:

          "dependencies": {
          }

然后再次运行npm install

答案 3 :(得分:0)

如果您要递归更新所有依赖项,我相信这是最快,最可靠的解决方案:

首先,请确保提交所有更改,以防git commit package*.json遇到问题。其次,根据需要使用npm outdatednpm update xyz

更新任何直接依赖项

现在,使用干净的package-lock.json更新所有软件包版本:

# remove current node_modules/ and package-lock.json
rm -rf package-lock.json node_modules/

# rebuild package-lock.json the the semantically-compatible 
# latest package versions & install node_modules/
npm install

# ensure nothing broke
npm test

如果有问题,请回滚:

rm -rf package-lock.json node_modules/
git checkout package*.json
npm install

P.S。这项技术对我来说效果很好,但是我一直在学习有关NPM和包锁定的更多信息。我很想听听其他NPM专家关于这项技术的信息。