一个节点模块可以利用它所依赖的节点模块的依赖性吗?

时间:2018-09-24 18:25:21

标签: javascript node.js npm

TL; DR;是否可以在Node中实现包继承?还是有推荐的工具可以帮助您解决此问题?

我正在包含60多个(并且正在不断增长)Web应用程序的企业环境中工作。我们还模块化了组件,例如页眉/页脚/登录/等。因此网络应用无需重复代码,只需将其作为依赖项即可。我们还提供了库模块来提供诸如通用日志记录,建模和错误处理之类的功能。我们还有一个主库,为测试和整理等维护提供了基础。

我想做的是访问该主库在上层模块中使用的依赖项。

lib-a   
   |   
   —> lib-b  
         |
         —> babel, chai, mocha, etc.

我想从lib-b获得lib-a“继承”的babel,chai,mocha等,而不必专门添加依赖项。这样,我所有的库以及最终的Web应用程序都将具有相同的版本,并且我不必在每个package.json中重复相同的依赖项。我也不必麻烦N个团队来更新60-100个应用程序/库/其他程序,而不得不与他们抱怨维护问题。

我确实知道这与npm的核心背道而驰,但从我们使用的层面上来看,这已成为维护上的麻烦。在这一点上,进行更多的DRY无疑会带来好处。

因此在顶部重复原始问题-是否可以在Node中实现包继承?还是有推荐的工具可以帮助您解决此问题?

我看过以下工具。有没有人使用过它们?或对此有想法。还有其他人吗?
https://github.com/FormidableLabs/builder
https://github.com/Cosium/dry-dry

1 个答案:

答案 0 :(得分:0)

这是一个坏主意。您应该假设您无法控制依赖项。还有谁能对依赖项进行更改?

假设您示例中的lib a使用mocha。由于它取决于lib b,而后者也取决于mocha,因此您可以决定不在mocha的{​​{1}}中列出lib a

如果有人重构package.json不再使用lib b,则mocha会突然掉下来。这不好。

我们同等数量的项目。我们使用GreenkeeperRenovateBot和一些工具将更改立即应用到所有存储库。从长远来看,对您而言,与反对Node的依赖模型相比,这可能是一个更好的策略。