我最近开始研究一个小项目,该项目利用了一些我希望最终开源的自定义模块。我已经阅读了一些文章,讨论了处理其他社区模块依赖性的当前最佳实践,但我一直在努力将数据库或2集成到我的模块中的最佳方法。
现在我正在使用Redis组合工作队列和MongoDB用于持久存储。逻辑与实际模块分离,并且是特定于应用程序的。我真的想将一些数据库/工作队列逻辑折叠到模块中以使模块更有用和健壮,但我不确定最好的方法,同时仍然允许潜在用户使用其他数据库技术。我理解每种类型的数据库都有缺点,并希望为用户提供一个API来改变我的默认choces。
我还担心在安装依赖于2个独立数据库系统的npm模块时创建的轻微入口障碍,并且很想知道任何人对该主题的评论。
答案 0 :(得分:2)
如果我编写了一个模块,我希望有人能够覆盖部分内部结构,我通常会通过params来处理构造函数。
在模块中:
function A(opts) { }
module.exports = A;
在使用代码中:
var opts = {
...
};
var A = require('./a')(opts);
将opts对象替换为您想要传递给opts的任何内容。你可以通过几种方式做到这一点,大多数人都有自己的风格。
就依赖性和最佳方法而言,我怀疑你只需要做出决定就可以了。最终,除非你只在npm内使用模块,否则你将被困在第三方依赖。只需确保您明确了解依赖关系,并确保如果有人这样选择,您可以概述如何更改这些依赖关系。