wb_editors
163
правки
N.maslov (обсуждение | вклад) |
N.maslov (обсуждение | вклад) (→Модули) |
||
Строка 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> |