因此,在我的项目中,我需要多个软件包,包括“ dep1”。

“ dep1”需要另一个依赖项“ dep2”。

而且“ dep2”需要多个软件包,包括“ dep3”。

问题是,“ dep3”与我要使用的许可证不兼容(实际上,与我老板要使用的许可证不兼容)。

幸运的是,只有“ dep2”的一个功能使用“ dep3”,而“ dep1”不使用此功能。因此,如果我从node_modules中删除“ dep3”,一切都会顺利进行。

我的问题是,在进行npm安装时,如何修改package.json以将其考虑在内,而不安装此软件包?

我知道我可以先分支“ dep2”来抑制该功能,然后再分支“ dep1”以使用修改后的“ dep2”,但这似乎过分了,我将依赖软件包的所有者来接受我的分支。我正在寻找一种解决方案,例如“好吧,只需将忽略行:“ dep3”添加到package.json中,但找不到任何解决方案。

谢谢你的帮助 !

最佳答案

最明显的方法是从NPM node_modules挂钩中的postinstall中删除​​不需要的依赖项。

或者,可以提供存根代替dep3。存根应包含package.json,它将其标识为具有匹配版本的替代品:

{
  "name": "dep3",
  "version": "VERSION THAT MATCHES DEP2 CONSTRAINT"
}


可以在dep中将其指定为本地依赖项:

...
"dependencies": {
  "dep3": "./dep3-stub",
  ...


或作为Git依赖项:

...
"dependencies": {
  "dep3": "github-user-name/dep3-stub",
  ...


如果版本约束匹配,将安装并使用dep3存根而不是实际软件包,否则dep2可能会安装自己的dep3副本。


  我知道我可以先分支“ dep2”来抑制该功能,然后再分支“ dep1”以使用修改后的“ dep2”,但这似乎过分了,我将依赖软件包的所有者来接受我的分支。


这是一个合理的方法。这与所有者无关。可以使用dep2分支代替dep2 NPM软件包,方法与dep3所示相同。

09-18 15:35