【发布时间】:2014-08-02 07:00:54
【问题描述】:
我知道可以通过将模块导出为函数并为您希望传递的每个变量提供参数来将变量传递给模块。例如
module.exports = module.exports = function (injectedVariable) {
app.get('/whatever', function (req, res, next) {
// Do something with injectedVariable
});
};
我知道这对于在不同模块周围传递“app”等变量很有用。但是,处理外部包依赖项的首选模式是什么。我见过这样的代码。
App.js
var jquery = require('jquery');
var _ = require('underscore');
var backbone = require('backbone');
var express = require('express');
// Pretty much every other external library
var app = express();
// Code here might config some of the 3rd party modules
require('routes/main.js')(app, _, jquery, backbone, someOtherModule, someOtherModule2);
require('routes/main.js')(app, _, jquery, backbone, someOtherModule, someOtherModule2);
// Etc
// Init server etc
然后每个路由模块将导出一个包含所有可用参数的函数,以支持它需要传递给它们的包。
这样做有什么理由吗?在每个文件的顶部只需要('whatever')会不会更干净?据推测,跨不同文件的同一模块有许多 require() 不是问题,因为 node 会从它在运行时遇到的第一个 require() 实例中提取其缓存版本。首选哪种管理包依赖项的方法?
【问题讨论】:
标签: javascript node.js express dependency-injection dependency-management