我在解决npm audit发现的重做漏洞时遇到问题。我的应用程序有一个嵌套的子依赖项ansi-html
,很容易受到攻击,但不幸的是,维护人员似乎逃之夭夭。正如您在Github问题的评论部分中所看到的,为了解决这个问题,社区制作了一个repo分支,名为ansi html community
,位于此处,它解决了这个漏洞。
因此,我想将所有嵌套引用的ansi-html
替换为ansi-html-社区
。
我使用npm force resolutions
的常规策略似乎无法完全覆盖具有不同包的嵌套子依赖项,而只能覆盖具有不同版本号的相同包。我已经研究了几个小时,但不幸的是,我发现解决这个问题的唯一方法似乎是用纱线,我现在正在认真考虑用它代替npm。但是,这并不理想,因为我们的整个CI/CD管道都配置为使用npm。
有人知道有没有其他方法可以实现嵌套子依赖包替换/解析,而不必切换到使用纱线?
这些是我能够找到的感兴趣的问题,但不幸的是,它们往往只讨论覆盖包版本号的方法,而不是包本身。
如何覆盖嵌套的NPM依赖项版本?
npm-如何覆盖依赖包的依赖项?
相关问题的CSE索引
我想通了。截至2021年10月,使用npm-force-分辨率
的解决方案实际上与使用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安装
时使npm-force-分辨率
起作用,您将需要在package.json
的脚本
部分下的preset
条目:
"scripts": {
"preinstall": "npx npm-force-resolutions"
}