我是Hapi.js的新手,我想弄清楚如何在Hapi.js设置中按顺序加载插件。
例如:我有两个插件Plugin1和Plugin2。假设Plugin2依赖于Plugin1,在执行Plugin1之前无法运行。
似乎是用两个单独的server.register方法加载这些插件,或者用一个server.register (使用插件数组)来并行执行插件代码。
那么,有人能帮我提前在order...thanks中加载插件吗?
发布于 2015-08-24 16:50:43
您将希望使用server.dependency作为解决方案。
使用它,您可以声明一个依赖于另一个插件的插件,如果缺少该依赖项(或者您意外地创建了一个循环依赖项),您的服务器将抛出。
这样,您就有机会使用after函数来延迟执行Plugin2中的代码,这些代码必须等到Plugin1加载之后才能执行。
你也可以在胶水github上看到标题为"不一致插件加载顺序“的讨论,或者这个叫做"由于没有按正确的顺序加载插件,服务器启动可能会失败。”的讨论来自aqua,以获得更多的信息和细节。
发布于 2015-08-24 16:51:03
你有几个选择可供选择。
你可以看看胶水。您可以使用插件的数组语法按特定顺序加载插件:
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'
};使用这种方法,插件注册顺序并不重要。对于大型应用程序来说,这是很棒的,因为在这些应用程序中,有很多不同的人或团队在使用插件。
发布于 2019-02-13 10:55:33
在创建服务器实例之后,您可以按照顺序注册插件。
例如:
const server = new Hapi.Server(ConfigUtils.resolve(Config.Server));
await server.register([
PluginUtils.bootstrap(AwsPlugin, ConfigUtils.resolve(Plugin.Aws) ),
PluginUtils.bootstrap(OrmPlugin, ConfigUtils.resolve(Plugin.Orm) ),
PluginUtils.bootstrap(SessionPlugin, ConfigUtils.resolve(Plugin.Session) ),
]);https://stackoverflow.com/questions/32187168
复制相似问题