我正在研究使用架构师来组织我的 Node 项目
https://github.com/c9/architect
在下面的演示文稿的幻灯片66中,它显示了如何创建插件实例。
http://www.slideshare.net/sergimansilla/architecting-large-nodejs-applications-14912706
这是代码段:
function startNewGame(name) {
var game = db.createNewGame(name);
var config = [
{
packagePath: "./game-status",
game: game
}
];
architect.createApp(/* snip */)
我无法确定应将哪些参数放入createApp中。在文档中,它仅提及已从磁盘加载的配置,如下所示
var architect_config = architect.loadConfig(path.join(__dirname, 'plugins.json'));
当我尝试像上面的示例一样直接加载配置时,它会引发错误
/code/npm_module_tests/architect_test/node_modules/architect/architect.js:423
throw err;
^
Error: Plugin is missing the setup function {"packagePath":"./app"}
这是我的代码
var path = require('path');
var architect = require('architect');
var config = [{
"packagePath": "./app2"
}]
var arch = architect.createApp(config, function (){
console.log('application started');
});
那么,如何使用architect.js创建插件实例?
编辑:
我已经阅读了代码,似乎需要通过loadConfig方法准备配置,假设该配置位于磁盘上。然后,如何如幻灯片所示将插件实例注入(inject)到配置中?
最佳答案
使用architect.resolveConfig
,当config位于js文件中时,loadConfig在内部使用它
function loadConfig(configPath, callback) {
var config = require(configPath);
var base = dirname(configPath);
return resolveConfig(config, base, callback);
}
尝试
var plugins = [{
provides: ["myService"], consumes: [],
setup: function(options, imports, register){
console.log(arguments)
register(null, { myService: {}})
}
}, {
provides: [], consumes: ["myService"],
setup: function(options, imports, register){
console.log(imports.myService)
}
}, {
packagePath: "./app"
game: game
}]
architect.resolveConfig(plugins, __dirname, function(err, config) {
var app = architect.createApp(config, function(err, app) {
console.log(err, app)
})
app.on("service", function (service) {
console.log(service)
})
})
或同步版本
var config = architect.resolveConfig(plugins, __dirname)
var app = architect.createApp(config)
app.on("service", function (service) {
console.log(service)
})