Пульс веб-платформы 11.10.2024
Новости
- вышел Firefox 131:
- из интересного поддержана фича Text fragments — возможность ссылаться не только на якорную ссылку на странице (
#anchor), но и на произвольный текстовый фрагмент, например,https://example.com/page[#:~:text=human]проскроллит страницу к первому встретившемуся слову «human», которое заодно можно стилизовать с помощью псевдокласса::target-text(к слову фича поддерживается теперь во всех браузерах) - в девтулзах улучшены поповеры кастомных свойств, теперь они показывают computed-значение и параметры свойства, если оно было объявлено через
@property, а также более удобным стало редактирование HTML и CSS в инспекторе
- из интересного поддержана фича Text fragments — возможность ссылаться не только на якорную ссылку на странице (
- Server Actions в 19 React стали называться Server Functions, а точнее стали подмножеством «серверных функций», которые не обязательно являются «экшном»
- есть такое сообщество e18e, которые взяли на себя роль «санитаров платформы», ходят к мейнтейнерам популярных пакетов, предлагают улучшения перфоманса, помогают выпилить ненужные зависимости; вот в сентябре удалось помочь выпилить смешную (да не очень) зависимость
is-numberиз chokidar, также хорошо так подчистили Storybook и jimp; важная движуха — уважуха! - выпущен Deno 2.0: уже рассказывал о фичах раньше про RC, в этом релизе обратил внимание на команду
deno compile, которая собирает приложение в запускаемый файл (даже с иконкой в Windows); я раньше не понимал, а потом как понял, что на самом деле Deno конкурирует больше с Bun, чем с Node, на поприще все-инструменты-в-одном - в Bun завезли экспериментальную поддержку сборки CSS на базе LightningCSS
Проекты
- one — React-фреймворк, собирающий приложение в веб и нейтив: под капотом Vite, также обещают локальную БД Zero (попробовать можно командой
npx one— интересно, а козырные названия пакетов, как и домены нынче покупают-продают?) - scalar — REST-API-клиент в формате OpenAPI (для одного пользователя бесплатно)
Статьи и демки
JS
- «если хочешь сделать хорошо — сделай сам», — подумал один разработчик и написал local-first веб-приложение, в котором можно описывать путешествие текстом и сразу смотреть маршрут на карте: из интересного на клиенте используется CRDT-либа Yjs, которая позволяет хранить данные локально на устройстве, и Y-Sweet — клиент и сервер для синхронизации состояния на S3 по вебсокет-соединению, чтобы пользоваться приложением одновременно с нескольких устройств в реалтайме (ещё один мой фетиш detected)
- держать секреты типы паролей в env-файлах довольно удобно, но при этом, чем больше секретов попадает env-файл, тем менее надёжной становится эта система: env-утекают на фронте/SSR, через логи или просто во время видео-стрима; отдельный прикол — env-переменные, с которыми запущен node-процесс видны в списке процессов в Unix-like-системах
- вообще-то это статья про то, как работает фича девтулзов Chrome «pause on uncaught exceptions» (этот факт надо «предсказывать», так как в момент выбрасывания исключения неясно, будет ли оно поймано дальше в коде); но меня заинтересовало другое: на сайте используется куча веб-компонентов (без драм и обсуждений), например,
<devsite-code>для отображения блоков кода, причём используются они корректно, в виде «виджетов»: кастомные элементы — это обёртки, докидывающие стилизацию и часть функциональности, а благодаря прогрессивному улучшению, в браузерах, не поддерживающих кастомные элементы, контент всё равно покажется, но немного коряво и с меньшей функциональностью, красота! - нативный нестинг в CSS правилах появился без флага в Chrome 112, но с немного другим синтаксисом (нужно было в некоторых случаях проставлять дополнительный
&) и это окончательно починили в грядущем Chrome 130, а чтобы не сесть в лужу со старыми версиями теперь нужно в нестинге обычные правила писать перед медиа-выражениями (что и логично) - как на коленке собрать RSS-агрегатор с помощью Astro и
rss-parser(сам тоже стал собирать RSS, но в тг-бота) - Map в JS пригодится, если нужно, чтобы ключами было что-то, кроме строк или символов, например, другие объекты или числа
CSS
- хороший пример, как построить цветовую тему с нативной поддержкой темной/светлой схемы: очень выразительно и гибко получается комбинировать oklch-формат и функцию
light-dark()
color: light-dark( oklch(from var(--secondary) var(--600)), oklch(from var(--secondary) var(--200)));- директива
@supportsне может проверять доступность других директив, но есть обходной путь — проверять наличие «родственного» обычного свойства, например:@containerпроверяется@supports (container-type: size); в статье есть рецепты для проверки многих директив, кроме@layer,@property,@starting-style(от себя добавлю сам@supports) - значение свойства
grid-template-rows: repeat(calc(var(--int)), 0px)можно сделать динамическим, если анимировать кастомное свойство--int, объявленное через@property
Платформа
- кажется мы стали забывать свои корни (а они уже разрослись), вот напоминание: роутер можно собрать на веб-компонентах (подход, популяризированный в React Router, когда вьюхи оборачиваются в «теги» роутов идеально ложатся на кастомные элементы); для централизованного хранения состояния можно использовать события
CustomEvent, доступные сто лет в обед; компоненты нативно реагируют на смену атрибутов («пропсы») и по умолчанию можно сделать фолбек-состояния компонентов - привязка названий двухбуквенных доменов к названиям стран, а точнее использование их не по назначению, имеет сайд-эффект: если страна перестаёт существовать, то что делать с более неактуальным доменом? Вот эта ситуация коснулась домена .io (Indian Ocean), «страна-владелец» которого перестаёт существовать