Htmx 4.0.0: явное наследование атрибутов, morph-свопы и переход на fetch()
После восьми месяцев работы (и одной попутно сделанной игры) команда 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
Комментарии
Войдите, чтобы комментировать.