问题与建筑设计模式有关。案例是我正在构建一个node.js工具,该工具可重用下面的几个NPM发布的模块。我想提供一种将这些依赖关系扩展在工具中所有模块之间的机制。
目前的问题是我工具中的所有模块彼此交谈,因此很少有文件:
var dep = require('dependency1');
他们从NPM加载 dependency1
as-is。我想提供一个可以扩展依赖关系的函数,例如
function (dependency) {
dependency.customFeature = ...;
dependency.customizeSettings(...);
return dependency;
}
并在我的工具中的所有模块中都可以使用这种超级依赖。
研究
我发现了这个问题,有人声称我不需要node.js中的依赖注入,而且我并不真正相信这一观点,因为我不知道没有DI,我不知道该如何实现目标。到目前为止,我认为我需要某种IOC。
解决方案草稿
我正在考虑一个factory
模块,该模块最初称为 - 它将加载所有原始依赖项,执行依赖项上的装饰/扩展功能,存储它们并让它们可用于其他模块。所有其他模块都会要求工厂提供扩展模块,而不是加载原始依赖项。
afaik,node.js在内存中存储加载的模块,因此上述解决方案应该可以工作,但我不确定这是否是正确的方法。
解决方案草稿工作( edit )
我已经实现了上述解决方案,并且可以很好地工作。node.js模块被重复使用在内存中。
请建议您在这种情况下使用的解决方案,并评论" node.js中的依赖项注入"主题。
我认为这个问题非常有用,但是在另一个帖子中得到了很好的回答,我需要在nodejs中注入依赖项,还是如何处理...?
在简而言之,遵循您提到的解决方案的行,更容易的方法是超越了要求功能。我认为优雅而简单。这是发布的示例表格:
var oldrequire = require
require = function(module) {
if (module === 'fs') {
return {
readdirSync: function(dir) {
return ['somefile.txt', 'error.txt', 'anotherfile.txt'];
};
};
} else
return oldrequire(module);
}
当然,您可以找到这个想法的许多变化,但这是概念
可能是您想要的东西,我遇到了一个名为咖啡甜味剂的不错的模块,示例中的示例是咖啡的,但几乎没有关系,因为您可以将它们编译为普通的JavaScript。/p>
它使您使用.map
方法定义所有模块,然后您可以从同一对象获得这些方法的实例。
实际上其他模块也可以定义自己的依赖项,而无需在同一文件中进行呼叫。让我知道您是否也在寻找相同的示例。