1.0.2 • Published 8 months ago

config-in-files v1.0.2

Weekly downloads
-
License
ISC
Repository
github
Last release
8 months ago

config-in-files

ENG

Легкий модуль для роботи з конфігураціями у Node.js, який забезпечує просту організацію конфігураційних файлів.

Особливості

  • Структурованість: Конфігурації зберігаються в окремих файлах, що дозволяє уникнути плутанини як з process.env.
  • Гнучкість: У конфігурації можна додавати логіку завантаження або генерації значень.
  • Простота: Мінімалістичний API для швидкої інтеграції.

Використання

Зберігайте конфігурації у вигляді JavaScript-файлів у папці config. Ім’я файлу стає ключем об’єкта конфігурації.

Файли конфігурації:

// project_dir/config/server.js
const config = { port: 8080 };

export default config;

Основний код:

import config from 'config-in-files';

const { port } = await config.server;
console.log(port); // 8080

Оточення (Dev, Prod та інші)

У config-in-files немає вбудованих інструментів для роботи з різними оточеннями, але ви можете використовувати NODE_ENV для управління різними конфігураціями для розробки.

Приклад:

// project_dir/config/server.js

// Визначаємо середовище на основі NODE_ENV
const env = process.env.NODE_ENV;

// Вибір порту залежно від середовища
const port = env === 'dev' ? 5000 : 8080;

// Створюємо конфігураційний об'єкт
const config = { port };

// Експортуємо конфігурацію
export default config;

Використання:

import config from 'config-in-files';

// Отримуємо значення порту з конфігурації
const { port } = await config.server; 

console.log(port);

// Якщо NODE_ENV не вказано, використовуватиметься значення за замовчуванням
// { port: 8080 }

// Якщо NODE_ENV=dev, то значення буде
// { port: 5000 }

Логіка завантаження

Файли конфігурації можуть включати асинхронну чи синхронну логіку завантаження. Наприклад завантаження даних із зовнішніх файлів, таких як криптографічні ключі або сертифікати чи завантаження даних із інших джерел - .env, API, тощо.

Файл конфігурації:

// project_dir/config/auth.js
import path from 'node:path';
import fs from 'node:fs/promises';

// Встановлюємо значеня за замовчюваням, якщо є потреба
const envKey = process.env.PRIV_KEY || './keys/private.key';

// Визначаємо папку проєкту
const projectDir = process.cwd();

// Отримуємо абсолютний шлях до файлу
const keyPath = path.join(projectDir, envKey);

// Завантажуємо вміст файлу
const key = await fs.readFile(keyPath, 'utf-8');

// Створюємо конфігураційний об'єкт
const config = {
  keys: {
    priv: key,
  },
};

// Експортуємо конфігурацію
export default config;

Основний код:

import config from 'config-in-files';

const { priv } = await config.auth.keys;

console.log(priv); // Вміст приватного ключа 

Папка конфігурацій

config-in-files має мінімальні налаштування. За замовчуванням, модуль шукає конфігураційні файли у папці config, але ви можете змінити це через CONFIG_DIR.

Приклад налаштування шляху до конфігурацій для package.json:

cross-env CONFIG_DIR=custom-config node ./app.js

Модуль буде шукати файли конфігурацій у project_dir/custom-config.

API

import config from 'config-in-files'

config це асинхронний об’єкт, що містить Proxy для завантаженя експорту файлів-модулів конфігурацій.

Кожен ключ відповідає імені файлу конфігурації.

Приклад:

import config from ‘config-in-files’;
const palaikuchkovoConfig = await config.palaikuchkovo;

// palaikuchkovoConfig містить експортовані дані із config/palaikuchkovo.js
  • Модулі конфігурацій завантажуються у момент першого зверненя і кешуються.
  • Дані у експорті модулів конфігурацій deepFreeze, для попередженя випадкової зміни їх вмісту.
1.0.2

8 months ago

1.0.1

8 months ago

1.0.0

1 year ago