Включение настроек
В module.json задайте options.settingsVersion — положительный номер схемы. Без него встроенная загрузка и запись настроек отключены.
{
"name": "settings-example",
"disableAutoUpdate": true,
"options": {
"settingsVersion": 1,
"settingsFile": "module_settings.json",
"settingsMigrator": "module_settings_migrator.js",
"settingsAutosaveOnClose": true
}
}
Последние три значения — значения по умолчанию. Пути разрешаются относительно папки модуля. Настройки доступны как mod.settings и разделяются экземплярами одного загруженного модуля.
Мигратор
Экспортируйте функцию (fromVersion, toVersion, settings), возвращающую объект новой схемы. При отсутствии файла fromVersion равен null; для старого файла без оболочки версии он может быть undefined.
// module_settings_migrator.js
module.exports = function migrate(fromVersion, toVersion, settings) {
const result = { enabled: true, message: 'Hello' };
if (settings && typeof settings.enabled === 'boolean') {
result.enabled = settings.enabled;
}
if (settings && typeof settings.message === 'string') {
result.message = settings.message;
}
return result;
};
Это пример одной схемы. При расширении формата увеличивайте номер и явно переносите старые значения. Мигратор вызывается при несовпадении версий, а не при каждом чтении файла. Обрабатывайте как переход вперед, так и возможный откат, если распространяете несколько сборок.
Чтение и сохранение
Настройки загружаются до создания экземпляров. Файл имеет оболочку:
{
"version": 1,
"data": {
"enabled": true,
"message": "Hello"
}
}
mod.loadSettings() перечитывает файл. mod.saveSettings() записывает текущий mod.settings. Автосохранение по умолчанию происходит при выгрузке модуля; для важного изменения можно сохранить сразу:
mod.settings.enabled = !mod.settings.enabled;
mod.saveSettings();
Ошибки записи логируются внутри Toolbox: возвращаемое значение saveSettings не является подтверждением успеха. Не делайте запись на каждый сетевой пакет. В текущей сборке BigInt кодируется строкой с префиксом BIGINT: и восстанавливается при чтении. Не используйте такие строки для обычного текста, который должен оставаться строкой.
Источник: bin/mod.js, методы loadSettings и saveSettings.