Module.exports vs plain json для файлов конфигурации

Я вижу несколько способов создания файлов конфигурации в Node.js. Один использует module.exports в js файле, один просто использует простой json-объект.

// config1.js
module.exports = {
  config_1: "value 1",
  config_2: "value 2"
}

// config2.json
{
  config_1: "value 1",
  config_2: "value 2"
}

Есть ли преимущества использования module.exports в файле конфигурации? В чем отличия?

Спасибо

Ответ 1

javascript CommonJS Module

  • комментарии
  • условными
  • и т.д. для заполнения значений по умолчанию
  • для изменения конфигурации на основе NODE_ENV или аналогичного
  • для поиска внешних файлов для ключей SSL, учетных данных API и т.д.
  • проще иметь резервные копии и значения по умолчанию

Файл JSON

  • легко анализировать и обновлять с помощью внешних инструментов
  • совместим практически со всеми языками программирования.
  • чистые данные, которые могут быть загружены без выполнения
  • удобный для печати
  • JSON может начинаться как основа, и все описанные выше элементы кода о модуле CommonJS могут жить в модуле config.js, который читает config.json как отправную точку

Таким образом, я всегда начинаю с модуля commonjs для удобства, но держу любую логику там простой. Если ваш config.js имеет ошибки и нуждается в тестах, это, вероятно, слишком сложно. ПОЦЕЛУЙ. Если я знаю, что в моей конфигурации захотят поиграть другие вещи, я буду использовать JSON файл.

Ответ 2

Спасибо @jonathan-ong, похоже, что config.js(НЕ JSON файл) работает так, как ожидалось, и я мог бы добавить некоторые комментарии.

module.exports = {

  // Development Environment

  development: {
    database: {
      host: '127.0.0.1',
      login: 'dev',
      password: 'dev'
    }
  },

  // Production Environment

  production: {
    database: {
      host: '127.0.0.1',
      login: 'prod',
      password: 'prod'
    }
  }
};

Ответ 3

У файлов

js есть свои привилегии, как упоминал @Peter Lyons. Но если мне не нужно обращаться к внешним ресурсам для ключей API и т.д., Я бы предпочел JSON для файлов конфигурации.

Простая причина Мне не пришлось бы касаться моего кода только ради внесения изменений в файлы конфигурации. Я могу просто создать API для редактирования этих json файлов для добавления, обновления или удаления любой пары ключ-значение конфигурации. Даже добавьте весь новый файл конфигурации для отдельной среды с помощью API.

И используйте конфигурационный модуль для использования этих конфигураций