javascript

easymake — «почти» очередной task-runner для сборки, тестирования и иных задач для node.js

  • воскресенье, 19 марта 2017 г. в 03:13:30
https://habrahabr.ru/post/324286/
  • Системы сборки
  • JavaScript


Сегодня существует множество task-runner'ов, boilerplates для быстрого старта разработки, но зачастую даже в этом случае приходится дорабатывать, писать, разбираться в куче настроечных файлов, и корень проекта зачастую похож на сборище разнообразных конфигов. Работая в разных проектах даже в рамках одной компании зачастую в каждом проекте все устроено по-своему и перед тем как начать с ним работать — сначала требуется прочитать кучку, зачастую увесистых, конфигов, чтобы разобраться — где что и как происходит и откуда растут ноги.

А хочется просто — взять и начать писать код, сразу. И просто писать тесты, легко запустить их, увидеть покрытие. И также получить финальную сборку.


Если вам хочется того же — то возможно вам будет интересно узнать о easymake.


В этой статье я опишу основные проблемы, в решении которых вам может помочь easymake.


1. Скорость старта. Просто взять и начать работать


easymake для простоты можно сравнить с капсульной кофеваркой. Сама по себе easymake не представляет пользы для конечного пользователя, всю ценность представляют пресеты, а easymake лишь обеспечивает их выполнение.


easymake представляет собой исполняемый файл с анализатором параметров командной строки, оркестратор задач и API (которое используется при выполнении задач и работой с конфиг-файлами).


При запуске анализируются переданные параметры и выполняются соотвествующие действия, обычно это либо копирование файлов конфигурации в проект, либо выполнение задачи.


Пресет содержит в себе набор задач и набор файлов конфигурации, а также перечисление пакетов, которые требуются для обеспечения его работы.


Таким образом, чтобы начать разрабатывать с easymake обычно требуется выполнить 5 простых шагов:


  1. npm init
  2. добавление в devDependencies требуемого пресета (easymake указан в зависимостях к пресету, нет необходимости его прописывать явно)
  3. в package.json в разделе config.easymake.preset указать имя используемого пресета из пункта 2.
  4. если в пресете имеется задача на создание начальной структуры проекта — выполнить её (например easymake --run create-folders)
  5. Запуск задачи на сборку bundle для разработки (например easymake --run bundle)

НАЧИНАЕМ РАБОТАТЬ!


Хотим тестировать и узнать покрытие? — нет проблем: easymake --run test-units (команда для default-preset'а)


Хотим получить сборку на продакшн — нет проблем: easymake --run bundle --production (команда для default-preset'а)


С easymake от идеи до начала реализации вас отделяет всего лишь 5 простых шагов.

2. Порядок в работе. Соблюдаем принятые подходы и лучшие практики


Я сейчас открыл 2 крупных проекта, в которых я принимал участие, в одном — 12 настроечных и вспомогательных файлов: скрипты запуска, сборки, публикации, настройки Gulp, Babel, EsLint, Webpack, Karma и др. Скрипты используют переменные среды, конец команды на сборку (npm run bundle) проекта может находится за пределами экрана. В другом — 11, задачи практически те же, реализация — совсем другая. Запуск проектов производится абсолютно по разному.


А теперь представьте что у вас таких проектов не 2, а 22. Кто-то собирает с помощью Gulp, кто-то с помощью Grunt, кто-то тестирует с помощью Jasmine, кто-то с помощью Mocha.


Как это все контролировать? Boilerplate? Отлично вы написали его, раздали, каждый склонировал, начал разрабатывать проект, время идет — конфиги пухнут. Вы решаете добавить какое-то правило в линтер, изменить сборку, или фреймворк тестирования — как синхронизировать это с существующими проектами? 22 раза зайти в каждый проект и руками обновлять конфиги и потом смотреть — а работает ли, а не сломалось ли.


При подходе на основе пресетов easymake вы делаете пресет (либо используете существующий) с типовыми задачами, с типовыми правилами, конфигурациями и утилитами. Каждый, начинающий проект — берет пресет и просто начинает работать в том окружении и с теми практиками, которые приняты.


Вы нашли что можно улучшить? Какие еще действия можно автоматизировать? Один из проектов переопределил конфигурацию пресета и стало лучше? — Обновите пресет. Далее в каждом проекте участники выполнят только одну команду — npm update — и ваши улучшения уже у них.


Один пресет — решение сотни проблем для многих проектов. Решили сто первую? — 1 команда — и ваше решение используют все.

3. Чистота рабочего места. Я больше не хочу этой копипасты


С чего начинается проект? Конечно с обустройства той инфраструктуры с помощью которой вы будете его собирать, тестировать, запускать и выполнять другие сопутствующие действия. Вы каждый раз пишете эти конфиги с нуля? Ctrl-C + Ctrl-V (или F5 для фанатов :) ) не надоело? А когда открываешь проект и в корне штук 5 разных .rc?


Если у вас есть подходящий пресет, все конфиги лежат в нем, никакого мусора. Если же вам надо что-то переопределить — это конечно можно сделать в виде изменения к нужному конфигу, а если это изменение будет полезно в рамках всего пресета его можно будет легко внести в пресет.


Никаких больше копирований конфигов из проекта в проект, никакого зоопарка настроек. Держим проект в чистоте и порядке.

Еще раз о том что дает использование easymake:


  1. Стартуем работу за 5 простых шагов
  2. Используем один пресет — одни подходы и методики разработки, улучшаем их быстро и без проблем.
  3. Не копипастим конфиги и вообще лучше бы их не видеть в проекте.

easymake всего лишь "почти" очередной task-runner


но, возможно, он поможет вам изменить ваши процессы разработки к лучшему и тратить больше времени на то что действительно важно, и конечно же, получать больше удовольствия от процесса разработки.

В заключении отмечу, что проект создан относительно недавно и находится в стадии разработки, но на текущий момент уже стабильно работающий и активно используемый персонально. Сам easymake врядли будет уже сильно меняться, а вот пресеты — это вещь живая.

На текущий момент имеется 2 пресета: для разработки библиотеки и для разработки web-приложения на React. Если у вас есть желание разработать свой пресет или улучшить существующий — буду рад.


easymake доступен в npm и GitHub.


Ссылки на существующие пресеты: https://github.com/madcode-tech/easymake/wiki