【问题标题】:How to prevent an unused npm dependency to be installed?如何防止安装未使用的 npm 依赖项?
【发布时间】:2018-10-29 02:16:44
【问题描述】:

所以在我的项目中,我需要多个包,包括“dep1”。

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

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

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

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

我遇到的问题是,如何在进行 npm install 时修改 package.json 以考虑到这一点,而不是安装这个包?

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

感谢您的帮助!

【问题讨论】:

  • 在我写这篇评论时,当前的 Node.js 版本是 11.0.0,它支持 --experimental-modules 标志下的 ES6 导入。在此功能稳定后,您将能够使用rollup 等工具将“摇树”应用到您的文件并生成不包含您不使用的代码的包。不幸的是,要让它工作,依赖树中的所有模块也应该切换到 ES6 导入,所以我们必须等待一段时间。

标签: node.js npm package


【解决方案1】:

显而易见的方法是在 NPM postinstall 钩子中从 node_modules 中删除不需要的依赖项。

或者,可以提供存根来代替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 stub 将被安装和使用,而不是真正的包,否则dep2 可能会安装它自己的dep3 副本。

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

这是一个合理的方法。这与业主无关。可以使用dep2 fork 代替dep2 NPM 包,方法与dep3 相同。

【讨论】:

    猜你喜欢
    • 2016-03-14
    • 1970-01-01
    • 2017-09-30
    • 1970-01-01
    • 2020-05-13
    • 2016-01-13
    • 1970-01-01
    • 2020-07-04
    • 2019-02-07
    相关资源
    最近更新 更多