@v4fire/config
Простой config-like конфигуратор с поддержкой параметров командной строки, переменных среды и вычисляемых опций, преобразования значений и их валидации.
Установка
npm
npm install @v4fire/config --save
yarn
yarn add @v4fire/config
Базовое использование
- Создайте папку config в корне своего проекта
- Внутри этой папки создайте default.js, development.js и production.js
- Каждый из этих файлов должен экспортировать объект – @v4fire/config берет за основу
default.js
, и подмешивает к нему development.js
или production.js
-- в зависимости от NODE_ENV.
Расширенные опции
@v4fire/config предоставляет простой интерфейс для использования переменных среды, параметров командной строки и создания вычисляемых в рантайме свойств, а также их преобразования и валидации.
Options
Большинство расширенных возможностей предоставляет функция option
из @v4fire/config/options
.
@v4fire/config
Для примера возьмем случай, когда нам нужно запускать приложения на разных портах (на локальной машине на одном, на бою -- на другом):
config/default.js
const {option: o} = require('@v4fire/config/options');
module.exports = {
port: o('port', {
default: 8080,
short: 'p',
env: 'PORT_TO_LISTEN',
coerce(value) {
return Number(value);
},
validate(value) {
return value > 0 && value < 65536;
}
})
}
app.js
const config = require('@v4fire/config');
console.log(`Application listen port ${config.port}`);
Теперь приложение можно запускать на разных портах:
$ node app --port 1717
Application listen port 1717
$ node app -p 2020
Application listen port 2020
$ export PORT=3030
$ node app
Application listen port 3030
Сomputed options
Если вам нужны в конфиге значения, которые нужно считать в рантайме (которые, скажем, зависят от других значений) -- для этого нужно использовать computedOption
из @v4fire/config/options
.
Пример:
config/default.js
const {option: o, computed: co} = require('@v4fire/config/options');
module.exports = {
build: {
platform: o('platform', {
default: 'linux',
valuesFlags: ['linux', 'windows', 'osx'],
validate: ['linux', 'windows', 'osx']
}),
includeWindowsOnlyFeature: co((config) => config.build.platform === 'windows')
}
}
build.js
const buildConfig = require('@v4fire/config').build;
console.log(`Platform: ${buildConfig.platform}`);
console.log(
`Windows only feature`,
buildConfig.includeWindowsOnlyFeature ? 'included' : 'not included'
)
Сборка:
$ node build
Platform: linux
Windows only feature not included
$ node build --platform osx
Platform: osx
Windows only feature not included
$ node build --windows
Platform: windows
Windows only feature included
API
@v4fire/config/options
option(name: string, params?: Object)
Универсальная функция для получения значения из параметров консольной строки или переменных окружения, их преобразования и валидации.
Приоритет источников от меньшего к большему:
- Значение по умолчанию
- Значение из переменной окружения
- Значение из командной строки
- Значение из командной строки для короткого алиаса (
short
) - Значение из командной строки для флагов значений (
valuesFlags
)
computedOption(handler: Function)
Вычисление значения в рантайме (например, на основании других параметров конфига). Принимает один параметр – функцию:
- handler:
(config) => any
– функция, которая принимает первым аргументом весь конфиг и возвращает значение.
Важно: эту функцию можно использовать только внутри объекта с конфигом. Так же важно не допускать появления кольцевых зависимостей – т.е. когда две опции зависят от значений друг друга – это приведет к переполнению стека и ошибке. Однако, одна вычисляемая опция может использовать значение другой вычисляемой опции.
@v4fire/config
Для получения конфига достаточно импортировать модуль:
const config = require('@v4fire/config');
Лицензия
MIT