Разработчики объясняют это тем, что они используют TypeScript, и он находится в папке src, поэтому вот так все собирается
Логично, нормальное решение.
Не нравится идея копировать dist и все вложенные папки
А в чём проблема? В dist не должно быть лишнего хлама, .git и прочего добра, по сути это готовая сборка приложения для деплоя, почему бы её не скопировать?
Не рекомендуют запускать npm install заново на сервере, так как по их мнению могут подтянуться совсем другие версии
А нехрен позволять npm-у ставить нефриженную версию в package.json. Нам вот уже настохорошело что проект ломается сам по себе из-за выхода новых версий библиотек, и мы зафризили все пакеты. Это нормальная ситуация, если у вас не библиотека, а конечное приложение.
package-lock.json
пытались использовать, но потом отказались - в версиях NPM 5.0-5.2 он работал отвратительно, сейчас уже может получше, не знаю.