您有几个选项可供选择。
您可以查看Glue。您可以使用数组语法加载特定顺序的插件:
var Glue = require('glue');
var manifest = {
server: {
cache: 'redis'
},
connections: [
{
port: 8000,
labels: ['web']
},
{
port: 8001,
labels: ['admin']
}
],
plugins: [
{ 'Plugin1': null },
{ 'Plugin2': null }
]
};
var options = {
relativeTo: __dirname
};
Glue.compose(manifest, options, function (err, server) {
if (err) {
throw err;
}
server.start(function () {
console.log('Hapi days!');
});
});
这与不使用Glue时执行以下操作相同:
server.register(require('Plugin1'), function (err) {
server.register(require('Plugin2'), function (err) {
server.start(function () {
console.log('Hapi days!');
});
});
});
然而,有顺序依赖的插件会很混乱,而hapi提供了更好的解决方法。您可以使用server.dependency()
来明确表达一个插件对另一个插件的依赖关系。因此,在Plugin2中,您可以执行以下操作:
var ready = function (server, next) {
server.route({
...
});
next();
};
exports.register = function (server, options, next) {
server.dependency('Plugin1', ready);
next();
};
exports.register.attributes = {
name: 'Plugin2',
version: '0.0.1'
};
采用这种方法,插件的注册顺序就不再重要。对于有很多插件由不同人或团队开发的大型应用程序来说,这非常棒。
server.dependency()
。链接应为http://hapijs.com/api#serverdependencydependencies-after。 - Matt Harrison