您有几个选择。
您可以查看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'
};
使用这种方法,插件注册顺序无关紧要。这对于有很多插件由不同的人或团队开发的大型应用程序来说非常有用。