По моему мнению, наличие разных выходных данных для каждой среды является существенным недостатком, поскольку это означает, что вам нужно собрать N копий приложения, выполнить те же команды сборки N раз и т. Д. Слишком легко столкнуться с ошибками, когда вы дали версия "dev" для сайта QA и т. д.
Есть небольшая третья опция, между которой я поклонник - сохранение значений конфигурации на самих серверах, отдельно от приложения, и приложение либо пишется, чтобы знать, где найти эти файлы конфигурации, либо вы иметь какой-то скрипт, который «переконфигурирует» приложение, заменяя токены в его файлах конфигурации на канонические значения из внешних файлов.
Таким образом, вы можете отправлять один и тот же двоичный файл для всех сред, а внешние конфигурации можно легко поместить под контроль источника (например, один файл на среду), чтобы изменения можно было проверять, изменения можно распространять автоматически и т. Д.
Это также удобный вариант, если вы работаете в большой организации, в которой разработчики отделены от группы, которая «управляет» приложением или отвечает за различные среды - поскольку с помощью этого метода разработчики могут знать, что для настройки, но другая группа отвечает за то, что значений конфигурации для предоставления на каждом хосте.