如何强制npm解析依赖项对不同包的依赖性?

时间:2017-07-12 18:09:45

标签: node.js npm leaflet

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

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

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

当我运行依赖于Leaflet的测试时,我有许多错误,因为Leaflet不幸地依赖于无头节点环境中不可用的一些全局变量(例如window)。幸运的是,有一个名为that was suggested的替代软件包leaflet-headless可以解决这些问题(如果你很好奇,它实际上是pretty interesting to see。)

有没有办法,只是为了我的包,告诉NPM在解析Esri-Leaflet的依赖关系时使用Leaflet的传单无头内容?也就是说,我要么删除下游的Leaflet依赖项(因为我的项目已经依赖于传单无头)或者将其更改为传单无头。

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

如果NPM没有功能来执行我要求的功能,您能推荐替代解决方案吗?我已经在探索在Leaflet上游修复对全局变量的依赖,以消除对传单无头的需求。

1 个答案:

答案 0 :(得分:0)

根据您的Node版本,这可能会也可能不会起作用,但我能够在Node 8上使用同名包来完成类似的工作。

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

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

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

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