NiK*_*NiK 5 plugins node.js hapijs
我是Hapi.js的新手,我想知道如何在Hapi.js设置中按顺序加载插件.
例如:我有2个插件Plugin1和Plugin2.比方说Plugin2 取决于Plugin1,直到无法运行Plugin1执行.
看起来像将这些插件加载到2个单独的server.register方法中或者使用单个server.register(带插件数组)似乎是并行执行插件代码...
所以,有人可以帮助我如何按顺序加载插件...提前感谢
您将希望server.dependency用作解决方案.
有了它,您可以声明一个依赖于另一个的插件,如果缺少依赖(或者您不小心创建循环依赖),您的服务器将抛出.
有了这个,您有机会使用该after函数来延迟Plugin2中的代码执行,该代码必须等到Plugin1加载.
您还可以在glue github repo上看到标题为" Inconsistent plugin load order "的讨论,或者这个名为" 服务器启动可能因为插件未按正确顺序加载而失败 "的解决方案来获取更多信息和详细信息.
您有几种选择。
你可以看看胶水。您可以使用插件的数组语法以特定顺序加载插件:
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!');
});
});
Run Code Online (Sandbox Code Playgroud)
这与不使用 Glue 执行以下操作相同:
server.register(require('Plugin1'), function (err) {
server.register(require('Plugin2'), function (err) {
server.start(function () {
console.log('Hapi days!');
});
});
});
Run Code Online (Sandbox Code Playgroud)
不过,依赖顺序的插件很混乱,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'
};
Run Code Online (Sandbox Code Playgroud)
使用这种方法,插件注册顺序并不重要。这对于大型应用程序来说非常有用,因为其中有许多插件由不同的人或团队开发。
| 归档时间: |
|
| 查看次数: |
2545 次 |
| 最近记录: |