概述
我在解决npm audit
发现的ReDoS漏洞时遇到了问题。我的应用程序有一个嵌套的子依赖ansi-html
,它容易受到攻击,但不幸的是,似乎maintainers have gone AWOL。正如你在Github问题的评论部分所看到的,为了解决这个问题,社区已经创建了一个名为ansi-html-community
located here的代码库分支,它解决了这个漏洞。
因此,我想用ansi-html-community
替换ansi-html
的所有嵌套引用。
问题
我使用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问题:
发布于 2021-10-16 00:51:10
我想通了。截至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
时工作,您需要在package.json
的scripts
部分下有一个preinstall
条目
"scripts": {
"preinstall": "npx npm-force-resolutions"
}
https://stackoverflow.com/questions/69548370
复制相似问题