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

xytpbqjk  于 2023-01-09  发布在  其他
关注(0)|答案(4)|浏览(371)

我很奇怪我找不到这个简单问题的答案。我也很奇怪npm update不能解决这个问题。
我不能在这里发布完整的依赖关系树,但让我描述一下我的问题:
minimist已过时(版本1.2.0),并且在此版本中存在安全漏洞。程序包要求minimist将依赖项定义为^1.2.0-以便它与1.2.2兼容。
常见的解决方案是把它放在devDependencies中的package.jsondependencies^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
7uzetpgm

7uzetpgm1#

你最好的选择是把npm升级到7.0以上的版本,更多细节请参考xeos的回答,如果不可能,有两种解决方案:
问题在于深度。从文档中可以看出:
从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

yzuktlbb

yzuktlbb2#

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

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

z9zf31ra3#

我还需要手动将最小化版本从“0.0.8”更改为“^1.2.5”,以获得“mkdirp”的依赖项

mrphzbgm

mrphzbgm4#

如果你想递归地更新所有的依赖项,我相信这是最快、最健壮的解决方案:
首先,确保提交任何更改,以防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

这个技术对我来说很有效,但是我一直在学习更多关于NPM和包锁的知识。我很想听听其他NPMMaven对这个技术的看法。

相关问题