0005 — Makefile
Увидел в твиторе весьма популярное мнение, что Makefile
— устаревшая технология, нужная только замшелым дедам, которые не могут идти в ногу со временем и пользуются этим говном мамонта только по той причине, что не способны освоить ничего нового.
Теперь я выскажу своё мнение. А чё вы мне сделаете? Я в другом городе!
Было время, когда сайты делались «по-колхозному»: вот тут у нас таблицы стилей, вот тут скрипты, а это миграции для БД. Обычно такая структура выглядела так:
site
└─static
├─js/
│ ├─bootstrap.min.js
│ └─jquery.min.js
└─css
├─bootstrap-theme.min.css
├─bootstrap.min.css
└─custom.css
И этого хватало для 95% сайтов. Надо ли говорить, что даже на мобильниках, умеющих только в 3G, всё это загружалось довольно быстро и нормально работало? Не верите?
Потом какой-то мудак придумал Web-приложения. Суть такова: мы сейчас напишем кучу говна, оно потом специальными скриптами соберётся из нескольких файлов, и на странице будут подключены:
- один единственный файл
styles.css
, в котором будут в уже сжатом виде все слепленные вместе таблицы стилей; - один единственный файл
app.js
, в котором будут в сжатом виде все скрипты, нужные для работы страницы.
Надо ли говорить, что кешируется всё это очень плохо?
Ну ладно, я сейчас не буду ныть, что раньше трава была зеленее, а небо голубее.
Всё это дело надо было как-то собирать. И фронтэндеры притащили на десктоп вещь из мира Web — NodeJS. Это такой JavaScript, как в браузере, только не нужный.
Сначала, по-моему, был такой сборщик Grunt.
Но он не долго продержался. Его довольно быстро, в течение 2—3 лет (по фронтэндерским меркам — целая вечность) заменил Gulp, который был вроде бы удобен, но только на фоне других существовавших средств.
И тут на сцену выходит WebPack. Стильно! Модно! Молодёжно!
А если проект не собирается, нужно всего лишь:
rm -rf ./node_modules/ && npm install
Я не шучу. Если опять не получилось, повторить несколько раз.
Хочется спросить: а какого хрена?
Ответ: в мире разработчиков переднего конца так принято. Потому что твоё приложение на 300 строк требует для сборки и запуска тысячи зависимостей, написанных какими-то чертями из интернета.
Ещё, кстати, появились шутки на тему квалификации разработчиков: умеет настраивать сборку через WebPack — гуру. Потому что WebPack очень быстро стал вещью в себе. Его настройка иногда сложнее, чем приложение, которое он должен собирать. Надо ли говорить про обратную совместимость? Сколько раз смена минорной версии полностью ломала сборку?
А что не так с Makefile
?
Да всё с ним так. Для запуска нужно присутствие в системе утилиты make
. Сам по себе Makefile
— простой как две копейки текстовый файл, в котором есть переменные и список команд.
Как запустить? Перейти в каталог с этим файлом и выполнить команду:
make
По-умолчанию запускается первая цель.
Если нужно выполнить другую задачу, надо передать её имя. Также можно собрать их в цепочку:
make && make install clean
Например, вот так выглядит Makefile
, который собирает этот сайт:
CC=hugo
USER=<имя пользователя>
HOST=<хост для выкладки>
FOLDER=<целевой каталог на хостинге>
build:
$(CC)
server:
$(CC) server \
--buildDrafts \
--watch
deploy:
$(CC) \
--minify \
&& scp -rp ./public/* $(USER)@$(HOST):$(FOLDER)
Для выгрузки готового сайта на хостинг я делаю так:
make deploy
Особенности:
- Между именем переменной, знаком
=
и значением не должно быть пробелов. - Для отступов надо использовать табуляцию.
- По традиции имя компилятора хранится в переменной
CC
.
В общем, проверенная годами технология, настоятельно рекомендую. Хороший ресурс для базового знакомства здесь.