首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何用不同的包(不仅仅是不同的包版本号)覆盖嵌套的npm子依赖关系?

如何用不同的包(不仅仅是不同的包版本号)覆盖嵌套的npm子依赖关系?
EN

Stack Overflow用户
提问于 2021-10-13 00:30:31
回答 1查看 5.2K关注 0票数 8

概述

我在解决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问题:

CSE Index of related questions

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-16 00:51:10

我想通了。截至2021年10月,使用npm-force-resolutions的解决方案实际上与您使用yarn指定它的方式非常相似。您只需要提供一个指向tarball的链接,您通常会在其中指定覆盖的版本号。package.json的分辨率部分应该如下所示:

代码语言:javascript
复制
"resolutions": {
    "ansi-html": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz"
}

要查找tarball的链接,请使用以下命令,并根据需要修改注册表:

代码语言:javascript
复制
npm view ansi-html-community dist.tarball --registry=https://registry.npmjs.org/

还要注意,要让npm-force-resolutions在运行npm install时工作,您需要在package.jsonscripts部分下有一个preinstall条目

代码语言:javascript
复制
  "scripts": {
    "preinstall": "npx npm-force-resolutions"
  }
票数 15
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69548370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档