因此,在我的项目中,我需要多个软件包,包括“ 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
所示相同。