如何强制npm将依赖项的依赖项解析为其他程序包?

col*_*n8r 5 node.js npm leaflet

TL; DR:如何将我的程序包的依赖项之一更改为其他程序包?例如,我想将Package A的依赖关系Package B更改为Package C,但仅对于Package A(即,我不想在上游更改Package A的依赖关系)。


我正在为Leaflet编写插件。Leaflet可作为NPM软件包使用(完成后,我的插件也将提供)。我的插件扩展了另一个插件Esri-Leaflet,它具有Leaflet作为依赖项。

我的插件使用Mocha / Chai / Sinon作为我的代码的测试框架。在开发过程中以及作为CI的一部分,我都使用NPM脚本运行这些测试。

当我运行依赖Leaflet的测试时,我会遇到很多错误,因为不幸的是,Leaflet依赖于无头节点环境(例如window)中不可用的全局变量。幸运的是,有人向我建议了一个名为leaflet-headless的替代软件包它可以解决这些问题(看看您是否好奇,这很有趣)。

有没有一种方法可以让NPM在解决Esri-Leaflet的依赖项时使用Leaflet无叶的intead?也就是说,我要么想删除下游的Leaflet依赖项(因为我的项目已经依赖无叶的),要么将其更改为无叶的。

我看过了npm shrinkwrap,但似乎只能指定版本号,而不能更改实际的软件包依赖项。

如果NPM无法执行我要的功能,您可以推荐替代解决方案吗?我已经在探索解决对上游Leaflet依赖的问题,以消除对无叶传单的需求。

JRJ*_*man -1

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

如果您需要使包同名,您可以分叉该项目,并将分叉重命名为相同的名称(在本例中为leaflet-headless-> Leaflet)。

获得 fork 后,在 package.json 中写入以下内容

dependencies: {
    "Leaflet": "username/Leaflet"
}
Run Code Online (Sandbox Code Playgroud)

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