提问者:小点点

如何覆盖嵌套的npm子依赖与一个完全不同的包(不只是不同的包版本号)?


我在解决npm audit发现的重做漏洞时遇到问题。我的应用程序有一个嵌套的子依赖项ansi-html,很容易受到攻击,但不幸的是,维护人员似乎逃之夭夭。正如您在Github问题的评论部分中所看到的,为了解决这个问题,社区制作了一个repo分支,名为ansi html community,位于此处,它解决了这个漏洞。

因此,我想将所有嵌套引用的ansi-html替换为ansi-html-社区

我使用npm force resolutions的常规策略似乎无法完全覆盖具有不同包的嵌套子依赖项,而只能覆盖具有不同版本号的相同包。我已经研究了几个小时,但不幸的是,我发现解决这个问题的唯一方法似乎是用纱线,我现在正在认真考虑用它代替npm。但是,这并不理想,因为我们的整个CI/CD管道都配置为使用npm。

有人知道有没有其他方法可以实现嵌套子依赖包替换/解析,而不必切换到使用纱线?

这些是我能够找到的感兴趣的问题,但不幸的是,它们往往只讨论覆盖包版本号的方法,而不是包本身。

如何覆盖嵌套的NPM依赖项版本?

npm-如何覆盖依赖包的依赖项?

相关问题的CSE索引


共1个答案

匿名用户

我想通了。截至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"
  }