Я делаю вот так:
примерчик и описание. Смысл примерно такой же, как в приложениях на Django: конфиг это код, импортим модуль в зависимости от некоторой переменной окружения, ./local.js имеет приоритет надо всем остальным.
Достоинства: очень гибко; можно "наследовать" друг от друга и переопределять конфиги в любом сочетании; не надо учить еще один язык конфигов (превед ямл) и не надо мириться с его недостатками (превед джейсон).
Недостатки: не декларативно; нет npm-модуля, чтоб из коробки; require кэширует подключенные модули, так что для обновления конфига на лету надо плясать с бубном.