概述
我在解决由 npm audit
识别的 ReDoS 漏洞时遇到问题.我的应用程序有一个嵌套的子依赖项 ansi-html
那很容易受到攻击,但不幸的是,似乎maintainers have gone AWOL .正如你在 Github 问题的评论部分看到的,为了解决这个问题,社区已经创建了一个名为 ansi-html-community
的 repo 的分支。位于 here ,解决了这个漏洞。
因此,我想替换 ansi-html
的所有嵌套引用。与 ansi-html-community
.
问题
我的正常使用策略 npm-force-resolutions
似乎无法完全覆盖具有不同包的嵌套子依赖项,而只能覆盖具有不同版本号的相同包。我已经研究了几个小时,但不幸的是,这是我找到解决此问题的唯一方法 would appear to be with yarn ,我现在正在认真考虑使用它来代替 npm。但是,这并不理想,因为我们的整个 CI/CD 管道都配置为使用 npm。
有没有人知道任何其他方法来完成嵌套的子依赖包替换/解析而不必切换到使用 yarn ?
相关问题
这些是我能够找到的感兴趣的问题,但不幸的是,它们往往只讨论覆盖包版本号的方法,而不是包本身。
讨论如何覆盖版本号:
How do I override nested NPM dependency versions?
有关于npm shrinkwrap
的评论讨论(不理想):
npm - how to override a dependent package's dependencies?
相关 StackOverflow 问题的 CSE 索引:
https://cse.google.com/cse?cx=016939242452552083305:j5gjtm1jbtf#gsc.tab=0&gsc.q=How%20to%20override%20nested%20sub%20dependencies%20with%20NPM&gsc.sort=
最佳答案
我想到了。截至 2021 年 10 月,使用 npm-force-resolutions
的解决方案实际上与您使用 yarn
指定它的方式非常相似.您只需要提供一个指向通常会指定覆盖版本号的 tarball 的链接。您的决议部分 package.json
应该是这样的:
"resolutions": {
"ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"
}
要查找 tarball 的链接,请使用以下命令,根据需要修改您的注册表:npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/
另外,请注意对于 npm-force-resolutions
运行时工作 npm install
,您将需要一个 preinstall
scripts
下的条目package.json
的部分: "scripts": {
"preinstall": "npx npm-force-resolutions"
}
关于node.js - 如何使用完全不同的包(不仅仅是不同的包版本号)覆盖嵌套的 npm 子依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69548370/