Движок правил wb-rules 1.7: различия между версиями

Строка 120: Строка 120:


= Модули =
= Модули =
Начиная с версии 1.7, в движке правил wb-rules появилась поддержка подключаемых JS-модулей (похожая по поведению на
аналогичную в Node.js, но с некоторыми особенностями).
== Расположение ==
Поиск модулей происходит по следующим путям (в заданном порядке):
* /etc/wb-rules/modules
* /usr/share/wb-rules/modules
Таким образом, пользовательские модули удобно складывать в /etc/wb-rules.
Добавить свои пути можно редактированием /etc/default/wb-rules добавлением путей
к переменной WB_RULES_MODULES через разделитель (:):
<syntaxhighlight lang="bash">
...
WB_RULES_MODULES="/etc/wb-rules/modules:/usr/share/wb-rules/modules"
...
</syntaxhighlight>
== Подключение модуля к сценарию ==
Подключение модуля происходит с помощью функции require(). Она возвращает объект, экспортированный
модулем (exports).
<syntaxhighlight lang="js">
...
var myModule = require("myModule");
...
</syntaxhighlight>
При этом движок правил будет искать файл myModule.js по очереди в директориях поиска (см. Расположение).
Также допустим поиск файла модуля по поддиректориям в директориях поиска, тогда вызов будет выглядеть так:
<syntaxhighlight lang="js">
...
var myModule = require("path/to/myModule");
...
</syntaxhighlight>
После того, как файл будет найден, его содержимое будет выполнено, и из файла будет передан объект exports.
'''Примечание 1:''' если модуль был подключен в одном сценарии несколько раз (несколько вызовов require("myModule")),
содержимое файла модуля будет выполнено только в первый раз, а при повторных вызовах будет возвращаться сохранённый
объект exports.
'''Примечание 2:''' если модуль подключается в разных сценариях, для каждого сценария будет создан свой объект модуля
и заново выполнен весь код модуля. Если модулю требуется использовать данные, общие для всех файлов сценариев,
для хранения данных следует использовать объект module.static.
== Создание модуля ==
Для создания модуля достаточно создать файл с именем, соответсвующим имени модуля (с расширением .js) в директории
/etc/wb-rules/modules.
В этом файле будут доступны все стандартные функции wb-rules, а также набор специальных объектов, с помощью
которого можно реализовать необходимый функционал модуля.
=== Объект exports ===
С помощью объекта exports можно передавать пользовательскому сценарию параметры и методы.
==== Пример ====
Файл модуля /etc/wb-rules/modules/myModule.js
<syntaxhighlight lang="js">
exports.hello = function(text) {
    log("Hello from module, {}", text);
};
exports.answer = 42;
</syntaxhighlight>
Файл сценария scenario.js
<syntaxhighlight lang="js">
var m = require(myModule);
m.hello("world"); // выведет в лог "Hello from module, world"
log("The answer is {}", m.answer); // выведет в лог "The answer is 42"
</syntaxhighlight>
=== Объект module ===
Объект module содержит параметры, относящиеся непосредственно к файлу модуля.
==== module.filename ====
Содержит полный путь до файла ''модуля''. Например, для модуля, сохранённого в /etc/wb-rules/modules/myModule.js:
<syntaxhighlight lang="js">
log(module.filename); // выведет /etc/wb-rules/modules/myModule.js
</syntaxhighlight>
==== module.static ====
Объект, хранящий данные, общие для всех экземпляров данного модуля. Его следует использовать для тех данных,
которые должны быть доступны сразу во всех сценариях, использующих данный модуль.
Файл /etc/wb-rules/modules/myModule.js
<syntaxhighlight lang="js">
</syntaxhighlight>
wb_editors
154

правки