【发布时间】:2018-09-10 17:53:34
【问题描述】:
到目前为止,我有一个 Node.js 模块,我将其保存为单个文件。虽然它变得相当大,并且其中有很多功能,可以更好地分离到其他模块中。例如,将日志记录初始化和功能分离到它自己的模块中。
我的模块有很多(我想说“全局”但不是真的)顶级变量,许多不同的函数可以访问、使用和修改这些变量。如果我将功能分离到单独的文件/模块中并要求它们进入我的主模块,那么在模块之间传递这些变量的正确方法是什么?
例如,将所有内容都放在一个模块/文件中,这样做很容易:
const logger = (log, message) {........}
const makeRequestHandler = (url, filepath) {
....
logger.info('some message here')
....
}
因此访问像logger 这样的顶级系统非常容易。但是,如果我决定将我的 logger 和 makeRequestHandler 拆分为它们自己的模块/文件,我将如何处理呢?
let logger = require('./mylogger') // Custom module
let makeRequest = require('./makerequest') // Another custom module
makeRequest.handler(url, filepath, logger)
这可行,但看起来并不优雅或最佳。如果我需要传入很多不同的变量,那就更奇怪了:
makeRequest.handler(url, filepath, logger, profiler, reportingBuffer, compressionHandler)
我也考虑过在需要时将东西传递到模块中:
let makeRequest = require('./makeRequest')(logger)
或者更好:
let makeRequest = require('./makeRequest')(this) // I can access all variables made in my primary/top-level module
这里有没有更合适、更好/更容易维护的方法?最后一种是最好的方法吗?
【问题讨论】:
-
依赖注入是在模块之间传递变量/依赖的常用方法。您还可以尝试控制反转 (ioc),例如服务定位器/服务提供者模式。您将拥有一个单例对象,该对象将保存需要使用的变量
标签: javascript node.js variables module node-modules