当前位置 : 主页 > 网页制作 > Nodejs >

node.js – 如何强制npm解析依赖项对不同包的依赖?

来源:互联网 收集:自由互联 发布时间:2021-06-16
TL; DR:我如何将我的包的依赖项的依赖项更改为另一个包?例如,我想将Package A的依赖包B更改为包C,但仅限于包A(即我不想更改包A的上游依赖关系). 我正在为Leaflet编写一个插件.传单可用
TL; DR:我如何将我的包的依赖项的依赖项更改为另一个包?例如,我想将Package A的依赖包B更改为包C,但仅限于包A(即我不想更改包A的上游依赖关系).

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

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

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

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

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

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

根据您的Node版本,这可能有效,也可能无效,但我能够在Node 8上使用同名包完成类似的操作.

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

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

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

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

网友评论