因此,在我的项目中,我需要多个软件包,包括“ dep1”。
“ dep1”需要另一个依赖项“ dep2”。
“ dep2”需要多个软件包,其中包括“ dep3”。
问题是,“ dep3”与我要使用的许可证不兼容(实际上,与我老板要使用的许可证不兼容)。
幸运的是,只有“ dep2”的一个功能使用“ dep3”,而“ dep1”不使用此功能。因此,如果我从node_modules删除“ dep3”,一切都会顺利进行。
我的问题是,在进行npm安装时如何修改package.json以将其考虑在内,而不安装此软件包?
我知道我可以分支“ dep2”来抑制该功能,然后使用“ dep1”来使用修改的“ dep2”,但这似乎有些过分,我将依赖软件包的所有者来接受我的分支。我正在寻找一种解决方案,例如“好吧,只需将忽略行:“ dep3”添加到package.json中,但是找不到任何内容。
感谢您的帮助!
答案 0 :(得分:1)
最明显的方法是从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
一样。