首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hapi.js按顺序加载插件

Hapi.js按顺序加载插件
EN

Stack Overflow用户
提问于 2015-08-24 16:26:01
回答 3查看 3K关注 0票数 6

我是Hapi.js的新手,我想弄清楚如何在Hapi.js设置中按顺序加载插件。

例如:我有两个插件Plugin1Plugin2。假设Plugin2依赖于Plugin1,在执行Plugin1之前无法运行。

似乎是用两个单独的server.register方法加载这些插件,或者用一个server.register (使用插件数组)来并行执行插件代码。

那么,有人能帮我提前在order...thanks中加载插件吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-08-24 16:50:43

您将希望使用server.dependency作为解决方案。

使用它,您可以声明一个依赖于另一个插件的插件,如果缺少该依赖项(或者您意外地创建了一个循环依赖项),您的服务器将抛出。

这样,您就有机会使用after函数来延迟执行Plugin2中的代码,这些代码必须等到Plugin1加载之后才能执行。

你也可以在胶水github上看到标题为"不一致插件加载顺序“的讨论,或者这个叫做"由于没有按正确的顺序加载插件,服务器启动可能会失败。”的讨论来自aqua,以获得更多的信息和细节。

票数 8
EN

Stack Overflow用户

发布于 2015-08-24 16:51:03

你有几个选择可供选择。

你可以看看胶水。您可以使用插件的数组语法按特定顺序加载插件:

代码语言:javascript
复制
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执行以下操作相同:

代码语言:javascript
复制
server.register(require('Plugin1'), function (err) {

    server.register(require('Plugin2'), function (err) {

        server.start(function () {

            console.log('Hapi days!');
        });
    });
});

但是,拥有依赖于订单的插件是很麻烦的,而hapi提供了一个更好的方法来解决这个问题。您可以使用server.dependency()来明确表示插件对另一个插件的依赖。因此,在Plugin2内部您可以这样做:

代码语言:javascript
复制
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'
};

使用这种方法,插件注册顺序并不重要。对于大型应用程序来说,这是很棒的,因为在这些应用程序中,有很多不同的人或团队在使用插件。

票数 5
EN

Stack Overflow用户

发布于 2019-02-13 10:55:33

在创建服务器实例之后,您可以按照顺序注册插件。

例如:

代码语言:javascript
复制
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) ),
]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32187168

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档