Я обычно сделал что-то вроде этого:
структуры файла:
config/
config.js
env/
development.js
test.js
production.js
А потом внутри config.js
файла магазин универсальных конфигураций вещей, а также загрузки соответствующей среды конфигурации:
// main config.js file
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
// load the config file for the current environment
var config = require('./env/' + process.env.NODE_ENV);
// extend config with universal config data
config.someEnvAgnosticSetting = true;
// export config
module.exports = config;
Это позволяет легко отделять конфигурацию, специфичную для окружающей среды, при этом для любого модуля, требующего конфигурации, требуется только требование ire корневой файл конфигурации.
Например, в вашем server.js
файле:
// require config, not worrying about what environment is being loaded
var config = require('./config/config');
// use config data
app.listen(config.port);
Edit: Кстати, я не делал этого подхода вверх - это очень общий для узлов приложений (или веб-приложений в целом, но это просто так бывает, что в узле вам нужно перевернуть свою собственную настройку). Посмотрите на mean.js example app для более глубокого примера, используя этот шаблон.
Есть ли причина, по которой вы не можете просто использовать переменные среды? – Darkhogg
Извинения, я был не очень ясен. Я использую переменные среды, но конкретно, как легко загружать различные значения на основе среды, например. порт 8080 в разработке, но 3000 в производстве. Надеюсь, это немного яснее ... – drlaj
Я имел в виду использование env vars для этих значений, поскольку 12 факторов предлагают: http://12factor.net/config – Darkhogg