WebDev+ | Веб-разработка
8.32K subscribers
504 photos
241 videos
10 files
700 links
Присоединяйтесь к нашему каналу и погрузитесь в мир веб-разработки

Связь: @devmangx
Download Telegram
Node всегда был про I/O: стримы, буферы, сокеты, файлы. Но есть один пробел, который меня раздражал годами: нельзя виртуализировать файловую систему.

Нельзя импортировать модуль, который существует только в памяти. Нельзя собрать ассеты в Single Executable без патчинга половины стандартной библиотеки.

Теперь это меняется :

Аносируют две вещи:

node:vfs — виртуальная файловая система, которая появляется в core Node.js (PR #61478, ~14 000 строк в 66 файлах)

@platformatic/vfs — userland-пакет, который можно использовать уже сейчас на Node.js 22+

Вот в чём проблема. Каждый раз, когда нужно:

- собрать приложение в Single Executable
- запускать тесты без обращения к диску
- заизолировать файловый доступ арендатора (tenant)
- загружать сгенерированный ИИ код во время выполнения

нужен один и тот же примитив: виртуальная файловая система, которая интегрируется и с node:fs, и с резолвером модулей. Никто этого не делал.

Экосистема предлагала приближённые решения: memfs, unionfs, mock-fs. У всех одна и та же проблема: они патчат fs, но не резолвер модулей.

Код с вызовом import('./config.json') полностью их обходит.

Два режима:

Mount mode: VFS активна только под заданным префиксом пути. Чистая изоляция.

Overlay mode: VFS проверяется первой для всех путей, затем происходит fallback на реальную файловую систему. Можно переопределить несколько конфигов и оставить остальное без изменений. Идеально для тестирования.

Почему это должно быть в core? Потому что userland-решения всегда компромисс:

- 960+ строк дублированной логики резолвинга модулей
- патчинг приватных API вроде Module._resolveFilename
- глобальный патчинг fs, который ломается, если код заранее сохранил ссылки
- нативные модули не могут загружаться из памяти
- невозможно корректно очистить кэш модулей извне

Скажу честно, как это появилось. PR на 16 000 строк обычно занимает месяцы. Этот был сделан за рождественские праздники 2025 года, потому автор делал его с помощью Claude Code.

Он отдал ИИ рутину: все варианты методов fs, покрытие тестами и документацию. Сам сосредоточился на архитектуре, дизайне API и построчном ревью.

Когда Мальте Убль, CTO Vercel увидел PR, команда Vercel независимо вынесла тот же API в userland как node-vfs-polyfill.

Когда две команды независимо реализуют одно и то же — значит, дизайн получился удачным.

https://github.com/vercel-labs/node-vfs-polyfill

@platformatic/vfs поставляется с дополнительными провайдерами, которых нет в core:

SqliteProvider: персистентная VFS на базе node:sqlite. Файлы сохраняются между перезапусками.

RealFSProvider: изолированный доступ к реальной файловой системе с встроенной защитой от path traversal. Больше не нужны хрупкие проверки через path.resolve().

@WebDev_Plus
2
Становится сложно не отставать от всех новых возможностей CSS.

@WebDev_Plus
👍6
This media is not supported in your browser
VIEW IN TELEGRAM
Создавай красивые карты для своего веб-сайта или приложения.
Бесплатно, без настройки и одной командой:

http://github.com/AnmolSaini16/mapcn

@WebDev_Plus
2
Ускорьте рендеринг с помощью content-visibility: auto

Это CSS-свойство пропускает рендеринг контента вне экрана до тех пор, пока он не понадобится, давая серьёзный прирост производительности на длинных страницах.

⋅ Хорошо сочетается с contain-intrinsic-size
⋅ Ленивый рендеринг практически «из коробки» (zero-effort)

Подробнее 👇
https://developer.mozilla.org/en-US/docs/Web/CSS/content-visibility

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
Фильтрация по геолокации — частое требование:

- «найти поблизости»
- «в радиусе X км»
- «отсортировать по расстоянию»

Eloquent scope помогает избежать дублирования Haversine-запросов.

Можно вынести это в Trait, чтобы использовать в нескольких моделях.

Или даже оформить как Package для использования в разных проектах.


@WebDev_Plus
1
Скоро можно будет попрощаться с Date() в JavaScript.

Temporal API уже находится на стадии Stage 4 и поддерживается в Chrome, Edge и Firefox. Поддержка — около 65% браузеров!

Новый способ работы с датами и временем.
С большим количеством утилит и улучшений:

@WebDev_Plus
❤‍🔥6
This media is not supported in your browser
VIEW IN TELEGRAM
JavaScript Array.with() — обновление неизменяемого массива в одном выражении

@WebDev_Plus
🔥2
push(), pop(), shift() и unshift() в JavaScript 👇

Это базовые методы массива, используемые для добавления или удаления элементов в начале или в конце массива.

Важные моменты:
▪️push() → добавляет элементы в конец массива
▪️pop() → удаляет последний элемент
▪️shift() → удаляет первый элемент
▪️unshift() → добавляет элементы в начало массива

Помните, что все эти методы изменяют исходный массив (они мутабельные).

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
2
Laravel tip

Знал ли ты, что CarbonPeriod может генерировать все даты в заданном диапазоне?

Больше никаких пропущенных дней в графиках.

@WebDev_Plus
2
В Next.js 16.2 ошибки браузера теперь напрямую прокидываются в терминал во время разработки

Больше не нужно переключаться в консоль браузера, чтобы дебажить client-side ошибки.

Особенно полезно для AI-агентов, которые не могут открыть DevTools и посмотреть ошибки в браузере.

@WebDev_Plus
CSS-совет:

Создавайте плавные переходы между страницами всего одной строкой CSS

@WebDev_Plus
На случай, если ты не знал: React концептуально не изобрёл RSC, SSR или Hydration.

SSR — это по сути Express:

app.get('/', (req, res) => {
res.render('index', { name: 'John' })
})


RSC — это Pug:

if name == "Bob"
button(class="btn") Hello Bob
else
button(class="btn") My name is #{name}


Hydration — это jQuery:

$('.btn').click(...)


Отсюда и следствия: в SSR нет window, в RSC нельзя навесить onClick, а проблемы с hydration были ещё в jQuery (например, опечатка в .btn), просто тогда это называлось не так модно.

@WebDev_Plus
Точно измеряйте производительность своего кода

performance.mark() и performance.measure() позволяют вам инструментировать JavaScript, используя высокоточные тайминги.

Узнайте больше 👇
https://developer.mozilla.org/en-US/docs/Web/API/Performance/mark

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Свойство transitionType для ссылок (Links) в Next.js 16.2
(требует дополнительной настройки для <ViewTransitions />)

<ViewTransitions> всё ещё является экспериментальной возможностью в Next.js и не рекомендуется для продакшена

Полное демо 👇

https://github.com/SidKH/gist-of-next-demos/blob/cursor/view-transition-transition-types-demo/README.md

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥1
CSS-совет:

Используйте svh, чтобы мобильная адресная строка не скрывала ваш UI. Это гарантирует точное соответствие видимой области экрана.

@WebDev_Plus
1
React / JS / TS приём

Используйте символы (Symbol) вместо null/undefined для представления отсутствующих значений.

Этот пример провайдера в React:

- позволяет передавать null
- при этом всё ещё проверяет, что пользователь не забыл обернуть в <Provider>

Бывают случаи, когда null — это вполне валидное значение контекста (ctx).

@WebDev_Plus
2
Это поможет вашим пользователям не уходить со страницы случайно — особенно при прокрутке таблицы или слайдера.

Запомните мои слова 😁

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
This media is not supported in your browser
VIEW IN TELEGRAM
Рарзраб прошёл через все круги ада, чтобы принести вам, на ближайшие годы, один из ключевых фундаментальных инструментов UI-инжиниринга (если не в реализации, то хотя бы в концепции): быстрый, точный и полный алгоритм измерения текста на стороне пользователя на чистом TypeScript, который можно использовать для верстки целых веб-страниц без CSS, обходя измерения DOM и перерасчёт reflow.

Верстка и измерение текста были последним и самым большим узким местом для создания более интересных UI, особенно в эпоху ИИ.

С этим решением больше не нужно выбирать между эффектностью GL-лендинга и практичностью статьи в блоге. Демки: тут

Установить через npm или bun:

npm install @chenglou/pretext
# или
bun add @chenglou/pretext


И используйте его, чтобы дать волю своему ИИ и создавать крутые демки 😶

@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
Вложенность CSS теперь является базовым стандартом!

Теперь можно писать вложенные селекторы прямо в CSS, как в Sass, но без использования препроцессоров. Просто пишите чистый CSS

Пример:

.card {
color: black;
&:hover { color: blue; }
.title { font-weight: bold; }
}

Что изменилось?
Теперь вам не нужно использовать препроцессоры, чтобы работать с вложенными селекторами. Всё доступно прямо в стандартном CSS

@WebDev_Plus
5
This media is not supported in your browser
VIEW IN TELEGRAM
CSS-тени. Глубина, которая действительно ощущается реалистично.

@WebDev_Plus
Если вы знаете эти строки CSS, вы можете сверстать 80% макетов 👇

display: flex;
justify-content: center;
align-items: center;

display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));

position: relative;
gap: 1rem;


@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
3😁1