Идеальная сборка и деплой
От: b0r3d0m  
Дата: 19.08.16 20:29
Оценка:
Каким вы видите себе идеальный процесс сборки-тестирования-запуска-деплоя веб-сервиса?

Предположим, у нас имеется веб-сервер, написанный на Node.js. В качестве менеджера пакетов используется npm, а в качестве системы сборки -- Gulp.
Фронтенд написан на JS и использует Bower для управления зависимостями.

Какие шаги необходимо проделать для запуска работоспособной версии из исходников:

Первый вопрос -- какие из этих тасков, по вашему мнению, должна осуществлять непосредственно build system, и почему?

Предлагаю пройтись по пунктам.

Первый шаг (установка Node.js) в любом случае решается пользователем (установкой из exe / msi / apt-get / etc), на систему сборки это возлагать не надо.

Второй шаг (установка зависимостей npm и Bower'а) может уже решаться как системой сборки (в данном случае Gulp), так и снова ложиться на плечи пользователя. Казалось бы, первый вариант предпочтительнее (как минимум в таком случае инкапсулируется информация о конкретных менеджерах пакетов), но тогда мы должны попросить пользователя отдельно поставить Gulp (npm install gulp), что в любом случае нарушит упомянутую в качестве плюса инкапсуляцию.

Тесты практически однозначно должна брать на себя система сборки. Пусть пользователь вызывает "gulp test" и не запаривается на тему того, что в следующих версиях test framework сменится с Mocha на какой-нибудь Expresso.

Минимизация JS и CSS файлов тоже однозначно является задачей системы сборки (в противном случае пользователю надо будет знать слишком много деталей реализации).

Запуск же веб-сервера, напротив, чисто задача пользователя. Gulp занимается сборкой, пользователь -- запуском того, что Gulp насобирал.

Второй вопрос заключается в уровне абстрации. Например, установка зависимостей необязательно должна "торчать" наружу, это вполне может быть кастомный скрипт из package.json:

"scripts": {
  "install-deps": "npm install && bower install"
}


, который пользователь будет запускать по выполнению команды "npm run install-deps".

Или в случае использования Gulp'а в проекте маневрирование пользователем npm напрямую -- в любом случае моветон, и надо говорить пользователю делать "gulp install-deps"? Насколько сильно желательно "огородить" пользователя от npm в сторону Gulp?

Ну и наконец, посоветуйте какие-нибудь публичные репозитории с грамотной структурой всего этого дела.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.