Hapi.js按顺序加载插件

我是Hapi.js的新手,我试图弄清楚如何在Hapi.js安装程序中加载插件。

例如:我有2个插件Plugin1Plugin2 。 可以说Plugin2依赖于Plugin1 ,直到Plugin1执行才能运行。

看起来像加载这些插件在2个独立的server.register方法或一个server.register(与插件数组)似乎是在并行执行插件代码…

所以,有人可以帮我,我怎么才能加载插件顺序…先谢谢了

您将需要使用server.dependency作为解决scheme。

有了它,你可以声明一个插件依赖于另一个,如果依赖项丢失(或者你不小心创build一个循环依赖),你的服务器将抛出。

有了这个,你有机会使用after函数来延迟Plugin2中的代码的执行,必须等到Plugin1被加载。

您也可以在github胶水回购站上看到标题为“ 不一致的插件加载顺序 ”的讨论,或者从aqua获取更多信息和详细信息,名为“ 服务器启动可能因插件未按正确顺序加载而失败 ”的讨论。

你有几个选项可供你使用。

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

 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!'); }); }); 

这与不使用胶水的情况相同:

 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' }; 

采用这种方法,插件注册顺序无关紧要。 对于那些有很多插件由不同的人或团队进行工作的大型应用程序来说,这非常棒。