javascript - 一个 Node 模块可以利用它所依赖的 Node 模块的依赖关系吗?

标签 javascript node.js npm

TL;博士; Node中是否可以实现包继承?或者有推荐的工具可以帮助解决这个问题吗?

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

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

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

我想让 lib-a 从 lib-b “继承”babel、chai、mocha 等,而不必专门添加依赖项。这样我的所有库以及最终的 Web 应用程序都将具有相同的版本,并且我不必在每个 package.json 中重复相同的依赖项。我也不需要经历让 N 个团队更新 60-100 个应用程序/库/诸如此类的麻烦,并且必须处理他们提示维护问题。

我确实知道这违背了 npm 的核心,但在我们使用它的层面上,它正在成为维护难题。在这一点上,更加 DRY 肯定会带来好处。

因此,重复顶部的原始问题 - 是否可以在 Node 中实现包继承?或者有什么推荐的工具可以帮助解决这个问题吗?

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

最佳答案

这是一个坏主意。您应该假设您无法控制依赖项。还有什么方法可以改变依赖关系呢?

假设您的示例中的lib a使用mocha。由于它依赖于 lib b,而 lib b 也依赖于 mocha,因此您可以决定不在 lib apackage.json 中列出 mocha

如果有人重构 lib b 不再使用 mochalib a 就会突然崩溃。这不好。

我们处理同样多的项目。我们使用Greenkeeper , RenovateBot ,以及一些立即将更改应用于我们所有存储库的工具。从长远来看,这对您来说可能是比违背 Node 的依赖模型更好的策略。

关于javascript - 一个 Node 模块可以利用它所依赖的 Node 模块的依赖关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52485263/

相关文章:

JavaScript 游戏视口(viewport)

javascript - 输入值不随用户输入而改变

javascript - tinyMCE 无法在 IE6 中使用 jQuery 1.4.2

javascript - Discord.JS |从用户消息中删除嵌入的功能或方法?

node.js - 聚合查询中 $geoNear 存在歧义

npm - 关于发布 Angular 2 应用程序

javascript - Angular CLI 如何为每个组件生成和引用 JS 文件

javascript - 澄清 Mockgoose/Mongoose 的用法?

javascript - 如何在一个 npm 包中暴露多个文件?

javascript - ParcelJs 在所有文件链接之前添加额外的 "/"