
Пульс веб-платформы 13.06.2025
Новости
- обновился редактор Cursor 1.0:
- главное — появилась настройка в 1 клик MCP-серверов
- также из интересного появилась бета-фича Memories: редактор может запоминать факты из диалогов и ссылаться на них в будущем
- последние обновления ES от TC39:
Array.fromAsync
перешёл на Stage 4 (доступен везде)Error.isError
перешёл на Stage 4 (доступен везде)using
перешёл на Stage 4 (Chrome only)- Seeded Pseudo Random Numbers от Tab Atkins перешёл на Stage 2
- обновился Astro 5.9:
- появилась экспериментальная встроенная поддержка
Content-Security-Policy
посредством встраивания тега<meta>
с нужными хэшами используемых файлов (также загружаемых динамически)
- появилась экспериментальная встроенная поддержка
- недавно анонсировали
@platformatic/php-node
— официальный модуль Node.js с возможностью процессить PHP внутри Node.js-рантайма; главный вопрос был «зочем?», и вот выпустили статью, где рассказали юзкейсы: миграция PHP-прил на Node.js, гибридные приложения (Node.js сервисы с кусочками PHP-процессинга) - React Router пообещали сделать стабильнее через перевод процесса разработки на процесс TC39 Process (проход по стейджам + публичные обсуждения)
- команда Edge завезла в будущий Chrome 139 стилизацию gap-ов в гридах/флексбоксах посредством новых свойств
column-rule-*
иrow-rule-*
- релизнули первый стабильный Oxlint (линтер на Rust от Evan You сотоварищи):
- за счёт мультипоточности быстрее ESLint в 50-100x
- есть автомиграция flat-config-а ESLint в
.oxlintrc.json
- сразу включает > 500 правил из самого ESLint и популярных плагинов + собственные правила
- DigitalOcean выпустили MCP-сервер, чтобы деплоить на платформу сразу из редактора без лишних конфигов
- анонсировали бету Safari 26, да, Safari 19 не будет, будет сразу 26, следуя за числом года (что будет после 2099 года видимо уже неважно):
- наконец-то будут SVG-favicon-ки
- тег
<model>
для показа 3d-моделей в браузере (с фолбеком в обычную картинку) - в CSS поддержаны Anchor Positioning, Scroll-driven Animations,
contrast-color()
,progress()
,margin-trim
- из API поддержаны
URLPattern
,scrollMargin
вIntersectionObserver
,File System WritableStream
, Pattern Modifiers вRegExp
Проекты
- canidev.tools — CanIUse для фич девтулзов в движках
- odyc — забавная либа для создания простых нарративных игр прям из конфига, такие вайбы «языка» Scratch
- lingo.dev compiler — мультиязычная поддержка в React-прилах через слой перевода с помощью LLM: думаю, такую тенденцию будем наблюдать и дальше — воткни LLM-слой в сборку для какой-то понятной ограниченной задачи и всё просто заработает
Статьи, мнения, туториалы
JS/TS
- с помощью
document.currentScript
можно пробросить через тег<script>
внутрь скрипта data-атрибуты, чекать обычные атрибуты (типа, что скрипту обязательно проставленdefer
) или же порядок следования скрипта в разметке (только в началеbody
или после определённого элемента) - Tanner Linsley убеждает, что URL как хранилище стейта недооценено из-за проблем с парсингом, типизацией и отсутствия связи с роутингом напрямую и рекомендует использовать TanStack Router, чтобы порешать все эти проблемы и наслаждаться рантайм-валидацией роутов с безопасным сохранением стейта в URL
- в отличие от директив (типа
use strict
) магические комменты в начале файлов вроде/** @aPragma */
или//# aMagicComment
, влияющие на процесс интерпретации и транспиляции JS-файлов, нестандартны и мало задокументированы
CSS
- напоминание, что у вариативных шрифтов можно анимировать
font-weight
- ещё одно напоминание: вьюпорт-ориентированные динамические единицы измерения
sv*
,lv*
,dv*
с нами уже с 2022 года, то есть сейчас уже считаются широко распространёнными - анимация до не фиксированного, а динамического значения:
@keyframes oscillate { from { transform: translateX(calc(var(--amount) * -1)); } to { transform: translateX(var(--amount)); }}
1fr 1fr
vsauto auto
vs50% 50%
, что выбрать, если нужно разделить на две равные части: в итоге лучше будет воспользоваться гридовымminmax(0, 1fr)
для возможности работыoverflow
при переполнении
HTML
- элемент
<output>
задуман для отображения результата вычисления, значение задаётся как для элемента формы (черезvalue
), но при этом находясь внутри<form>
элемент не сабмитится, то есть служит чисто для визуализации
Платформа
- задумывались ли вы куда следует ставить фокус при открытии модалки: в инпут, на кнопку закрытия, на заголовок, на кнопку ключевого действия в модалке? Однозначного ответа на этот вопрос нет, зато есть набор вопросов, которые можно себе задать, чтобы выбрать подходящий вариант для вашего конкретного случая