Препроцессинг сокращённой записи HTML-атрибутов в CI/CD
Разработчики часто сталкиваются с необходимостью трансформации компактных шаблонов в полноценный HTML. Например, запись <div #my-div .card.info></div> должна превращаться в <div id="my-div" class="card info"></div>. Если раньше такой препроцессинг выполнялся в рантайме, то для продакшена надёжнее вынести его на этап сборки - в конвейер CI/CD. Разберём, какие инструменты помогут это реализовать.
Готовые Node.js-модули для препроцессинга
Необязательно писать парсер с нуля: существуют специализированные библиотеки, которые умеют обрабатывать подобный синтаксис. Одна из них - emmetio/implicit-closing или более популярная posthtml-expressions. Они позволяют задавать собственные правила сокращений и преобразовывать их на этапе сборки.
Использование PostHTML
PostHTML - это мощный инструмент для трансформации HTML с помощью плагинов. Для вашей задачи подойдёт плагин posthtml-attributes, который парсит атрибуты в сокращённой записи и заменяет их на стандартные. Пример конфигурации:
const posthtml = require('posthtml');
const attributes = require('posthtml-attributes');
posthtml([
attributes({
prefix: '#' -> 'id',
prefix: '.' -> 'class'
})
])
.process('')
.then(result => console.log(result.html));
// Output: Такой подход легко встраивается в Gulp, Webpack или любой другой сборщик, а затем запускается в CI/CD.
Альтернативы: ANTLR или ручной парсинг
Если вам нужна максимальная гибкость и поддержка нестандартных конструкций, можно рассмотреть ANTLR. Однако для простой задачи (замена # и . на id и class) это избыточно. Достаточно регулярных выражений или простого стейт-машины. Готовые решения экономят время и уменьшают количество багов.
Дополнительные возможности (плюшки)
Многие библиотеки поддерживают настраиваемые префиксы, вложенность и даже условные атрибуты. Например, posthtml-expressions позволяет писать <div class="{isActive ? 'active' : ''}"></div> и вычислять выражения на этапе сборки. Это особенно удобно для статических генераторов.
Интеграция в CI/CD
Чтобы внедрить препроцессинг в пайплайн, добавьте шаг сборки с помощью npm-скрипта. Пример для GitHub Actions:
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm run build:htmlВ скрипте build:html запускается PostHTML с нужными плагинами. Результат - чистый HTML без лишних преобразований в рантайме.
Рекомендации по выбору
- Для типовых задач - PostHTML с плагинами (быстро, просто, расширяемо).
- Для сложных трансформаций - ANTLR или hand-rolled парсер на базе регулярных выражений.
- Для минимализма - самописная функция на Node.js, если синтаксис строго ограничен.
Выбор зависит от сложности вашего шаблонного языка. В большинстве случаев готовые решения покрывают потребности и легко интегрируются в CI/CD.