我怎样才能强制npm解决一个依赖的依赖到一个不同的包?

TL; DR:如何将我的包的依赖关系的一个依赖关系更改为不同的包? 例如,我想将Package A的依赖包B更改为Package C,但只对Package A(即,我不想在上游更改包A的依赖关系)。


我正在为Leaflet写一个插件。 小册子可以作为NPM软件包(当我完成后,我的插件也将是)。 还有另外一个插件,我的插件扩展了Esri-Leaflet ,它有Leaflet作为依赖。

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

当我运行依赖Leaflet的testing时,我有一些错误,因为不幸的是,Leaflet依赖于在无头节点环境(如window )中不可用的一些全局variables。 幸运的是,还有一个替代的软件包,叫做leaflet-headless ,可以解决这些问题( 看看你是否好奇真的很有趣 )。

有没有办法,只是为了我的包,告诉NPM在解决Esri-Leaflet的依赖性时使用Leaflet的无头单元? 也就是说,我要么删除下游Leaflet依赖项(因为我的项目已经取决于leaflet-headless),要么将其更改为leaflet-headless。

我已经看了npm shrinkwrap ,但它似乎只能指定版本号,而不是改变实际的软件包依赖关系。

如果NPM没有function来做我想问的问题,你能推荐一个替代解决scheme吗? 我已经在探索解决上游小册子中的全局依赖问题,以消除单页无头的需要。

这可能会或可能不会工作取决于您的版本的节点,但我能够在节点8上完成类似的命名包类似的东西。

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

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

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

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