Node.js模块依赖性覆盖或注入或IOC



问题与建筑设计模式有关。案例是我正在构建一个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方法定义所有模块,然后您可以从同一对象获得这些方法的实例。

实际上其他模块也可以定义自己的依赖项,而无需在同一文件中进行呼叫。让我知道您是否也在寻找相同的示例。

最新更新