Htmx 4.0.0: явное наследование атрибутов, morph-свопы и переход на fetch()

· Программы
Команда htmx выпустила четвёртую версию популярной библиотеки. Внешне она почти не отличается от htmx 2, но внутри переработана — от событий и наследования атрибутов до сетевого слоя.

cover.svg

После восьми месяцев работы (и одной попутно сделанной игры) команда htmx представила версию 4.0.0. Разработчики подчёркивают: с точки зрения пользователя новинка почти неотличима от htmx 2, а немногочисленные расхождения продуманы так, чтобы приложения оставались работоспособными в расчёте на «столетний веб-сервис».

Что изменилось для разработчиков

Главное изменение — наследование атрибутов теперь по умолчанию явное. В htmx 2 атрибут, размещённый на родительском элементе, автоматически распространялся на потомков — механизм, унаследованный ещё от intercooler.js и вдохновлённый CSS. Он оказался столь же мощным, сколь и запутанным. В htmx 4 наследование нужно включать вручную, добавляя суффикс :inherited к имени атрибута. Это самый заметный пункт при миграции, поэтому в комплекте идёт консольная утилита, которая находит места, требующие правки.

Второе новшество — приведённые к единому виду имена событий по схеме htmx:phase:action. Так, htmx:beforeRequest превратился в htmx:before:request. Часть событий убрана: ушли htmx:xhr:* (из-за перехода на fetch()) и htmx:validation:* (в пользу штатной браузерной валидации форм).

Третье изменение касается истории. Раньше htmx кэшировал снимки страниц в localStorage, что порождало массу проблем: при восстановлении страницы оставались правки от сторонних скриптов, тогда как их логика — нет. Теперь при навигации назад htmx просто заново запрашивает страницу и подставляет её в <body>. Для тех, кому нужно локальное кэширование, есть отдельное расширение hx-history-cache на основе sessionStorage.

Внутренности и новые возможности

Библиотека наконец перешла с XMLHttpRequest на fetch() — для большинства пользователей это незаметно, но именно этот шаг позволил переосмыслить систему расширений. Среди новых функций — встроенная поддержка morph-свопов на основе алгоритма idiomorph и тег <hx-partial>, более наглядная альтернатива out-of-band-обновлениям.

Отдельно появился набор расширений для потоковой передачи HTML (через SSE, WebSockets и multipart/mixed), а также собственное небольшое решение для фронтенд-скриптинга hx-live, вдохновлённое Alpine.js, jQuery и hyperscript.

Обновляться не обязательно

Версию 4.0 намеренно не помечают в npm как latest: тег latest остаётся за 2.x, чтобы не ломать проекты, ссылающиеся на неверсионированные CDN-адреса. Переход на 4.0 как основную линию запланирован на начало 2027 года, а htmx 2 будут поддерживать неопределённо долго.

Не обошлось и без приметы времени: разработчики выпустили набор файлов-навыков для больших языковых моделей — от общего руководства до помощи в миграции, — с иронией заметив, что вопрос о том, хорошо ли выпускать новую версию библиотеки в эпоху LLM, они предпочитают оставить открытым.


Источник: Hacker News

Комментарии

Войдите, чтобы комментировать.

  • Пока нет комментариев.