Провел эксперимент.
Создал модуль
//test_module.js
var static = module.static;
log(">>>>[MODULE:{}] Initializing from rule '{}' (static: {})", module.filename, __filename, JSON.stringify(static));
var counter = static.counter || 0;
static.counter = ++counter;
exports.counter = counter;
exports.static = static;
log(">>>>[MODULE:{}] Initialized from rule '{}' (static: {})", module.filename, __filename, JSON.stringify(static));
и два правила
//rule_a.js
log(">>>>[RULE:{}] Initializing", __filename);
var module = require("test_module");
log(">>>>[RULE:{}] module global counter = {}, (module static: {})", __filename, module.counter, JSON.stringify(module.static));
//rule_b.js
log(">>>>[RULE:{}] Initializing", __filename);
var module = require("test_module");
log(">>>>[RULE:{}] module global counter = {}, (module static: {})", __filename, module.counter, JSON.stringify(module.static));
при перезагрузке сервиса целиком вижу в логах:
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] Initializing
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initializing from rule '/etc/wb-rules/rule_a.js' (static: {})
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initialized from rule '/etc/wb-rules/rule_a.js' (static: {"counter":1})
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] module global counter = 1, (module static: {"counter":1})
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_b.js] Initializing
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initializing from rule '/etc/wb-rules/rule_b.js' (static: {"counter":1})
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initialized from rule '/etc/wb-rules/rule_b.js' (static: {"counter":2})
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_b.js] module global counter = 2, (module static: {"counter":2})
меняю правило rule_a, нажимаю сохранить.
В логах переинициализируется только это правило
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] Initializing
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initializing from rule '/etc/wb-rules/rule_a.js' (static: {"counter":2})
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initialized from rule '/etc/wb-rules/rule_a.js' (static: {"counter":3})
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] module global counter = 3, (module static: {"counter":3})
wb-rules[27714]: INFO: reloading file: /etc/wb-rules/rule_a.js
тут так же можно увидеть, что контекст module.static сохраняется.
Дальше я изменил модуль (убрал увеличение счетчика), сохранил. Правила не перегрузились.
И потом снова изменил правило rule_a и сохранил.
В логах видно, что правило rule_a подцепила новый модуль. Общий контекст module.static сохранился.
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] Initializing
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initializing from rule '/etc/wb-rules/rule_a.js' (static: {"counter":3})
wb-rules[27714]: INFO: [rule info] Changed module, doesn't change counter
wb-rules[27714]: INFO: [rule info] >>>>[MODULE:/etc/wb-rules-modules/test_module.js] Initialized from rule '/etc/wb-rules/rule_a.js' (static: {"counter":3})
wb-rules[27714]: INFO: [rule info] >>>>[RULE:/etc/wb-rules/rule_a.js] module global counter = 3, (module static: {"counter":3})
wb-rules[27714]: INFO: reloading file: /etc/wb-rules/rule_a.js
При полной перезакрузке сервиса wb-rules общий контекст module.static обнуляется, что в принципе ожидаемо.
Пошел чуть дальше. Добавил в модуль функцию test()
exports.test = function (){
log("!!![MODULE:{}] Text call from module V1 from rule '{}'", module.filename, __filename);
} ;
и добавил в обоих правилах вызов каждые 5 сек
setInterval(function (){
module.test();
}, 5000);
стали сыпатья такие логи
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_a.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_b.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_a.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_b.js'
поменял в модуле строку на V2, поменял и сохранил модуль rule_a
Правило rule_b продолжило использовать старый модуль, правило rule_a уже новый.
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_b.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V2 from rule '/etc/wb-rules/rule_a.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V1 from rule '/etc/wb-rules/rule_b.js'
wb-rules[10319]: INFO: [rule info] !!![MODULE:/etc/wb-rules-modules/test_module.js] Text call from module V2 from rule '/etc/wb-rules/rule_a.js'