gpt4 book ai didi

node.js - 我如何强制 npm 解决依赖项对不同包的依赖项?

转载 作者:搜寻专家 更新时间:2023-10-31 23:26:22 26 4
gpt4 key购买 nike

TL;DR: 如何将我的包的依赖项之一更改为不同的包?例如,我想将包 A 的依赖包 B 更改为包 C,但仅限于包 A(即我不想更改包 A 的上游依赖项)。


我正在为 Leaflet 写一个插件. Leaflet 可以作为 NPM 包使用(当我完成时,我的插件也将是)。我的插件还扩展了另一个插件,Esri-Leaflet ,它有传单作为依赖项。

我的插件使用 Mocha/Chai/Sinon作为我的代码的测试框架。我在开发期间和作为 CI 的一部分使用 NPM 脚本运行这些测试。

当我运行依赖于 Leaflet 的测试时,我遇到了一些错误,因为不幸的是,Leaflet 依赖于一些在 headless Node 环境(例如 window)中不可用的全局变量。幸运的是,有一个替代包 that was suggested我叫leaflet-headless可以解决这些问题(如果您好奇的话,它实际上是 pretty interesting to see)。

在解析 Esri-Leaflet 的依赖项时,有没有一种方法可以仅针对我的包,告诉 NPM 使用 Leaflet 的 leaflet-headless intead?也就是说,我要么删除下游的 Leaflet 依赖项(因为我的项目已经依赖于 leaflet-headless),要么将其更改为 leaflet-headless。

我看过npm shrinkwrap , 但它似乎只能指定版本号,不能更改实际的包依赖关系。

如果 NPM 无法满足我的要求,您能否推荐一个替代解决方案?我已经在探索修复 Leaflet 上游对全局变量的依赖,以消除对 leaflet-headless 的需求。

最佳答案

这可能有效也可能无效,具体取决于您的 Node 版本,但我能够使用同名包在 Node 8 上完成类似的事情。

如果你需要让包同名,你可以fork这个项目,并将fork重命名为相同的(在这种情况下leaflet-headless -> Leaflet).

在你有你的 fork 之后,在你的 package.json 中写下以下内容

dependencies: {
"Leaflet": "username/Leaflet"
}

如果您有 package-lock.json,您应该看到 Esri-Leaflet 指向您的 github,而不是作为依赖项的原始 Leaflet 项目。

关于node.js - 我如何强制 npm 解决依赖项对不同包的依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45064795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com