如何防止未使用的npm依赖项被安装?

时间:2018-10-23 13:14:35

标签: node.js npm package

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

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

“ dep2”需要多个软件包,其中包括“ dep3”。

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

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

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

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

感谢您的帮助!

1 个答案:

答案 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一样。