Node всегда был про I/O: стримы, буферы, сокеты, файлы. Но есть один пробел, который меня раздражал годами: нельзя виртуализировать файловую систему.
Нельзя импортировать модуль, который существует только в памяти. Нельзя собрать ассеты в Single Executable без патчинга половины стандартной библиотеки.
Теперь это меняется :
Аносируют две вещи:
node:vfs — виртуальная файловая система, которая появляется в core Node.js (PR #61478, ~14 000 строк в 66 файлах)
Вот в чём проблема. Каждый раз, когда нужно:
- собрать приложение в Single Executable
- запускать тесты без обращения к диску
- заизолировать файловый доступ арендатора (tenant)
- загружать сгенерированный ИИ код во время выполнения
нужен один и тот же примитив: виртуальная файловая система, которая интегрируется и с node:fs, и с резолвером модулей. Никто этого не делал.
Экосистема предлагала приближённые решения: memfs, unionfs, mock-fs. У всех одна и та же проблема: они патчат fs, но не резолвер модулей.
Код с вызовом
Два режима:
Mount mode: VFS активна только под заданным префиксом пути. Чистая изоляция.
Overlay mode: VFS проверяется первой для всех путей, затем происходит fallback на реальную файловую систему. Можно переопределить несколько конфигов и оставить остальное без изменений. Идеально для тестирования.
Почему это должно быть в core? Потому что userland-решения всегда компромисс:
- 960+ строк дублированной логики резолвинга модулей
- патчинг приватных API вроде
- глобальный патчинг 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
SqliteProvider: персистентная VFS на базе node:sqlite. Файлы сохраняются между перезапусками.
RealFSProvider: изолированный доступ к реальной файловой системе с встроенной защитой от path traversal. Больше не нужны хрупкие проверки через
@WebDev_Plus
Нельзя импортировать модуль, который существует только в памяти. Нельзя собрать ассеты в 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
This media is not supported in your browser
VIEW IN TELEGRAM
Создавай красивые карты для своего веб-сайта или приложения.
Бесплатно, без настройки и одной командой:
→ http://github.com/AnmolSaini16/mapcn
@WebDev_Plus
Бесплатно, без настройки и одной командой:
→ http://github.com/AnmolSaini16/mapcn
@WebDev_Plus
❤2
Ускорьте рендеринг с помощью
Это CSS-свойство пропускает рендеринг контента вне экрана до тех пор, пока он не понадобится, давая серьёзный прирост производительности на длинных страницах.
⋅ Хорошо сочетается с
⋅ Ленивый рендеринг практически «из коробки» (zero-effort)
Подробнее👇
https://developer.mozilla.org/en-US/docs/Web/CSS/content-visibility
@WebDev_Plus
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
- «найти поблизости»
- «в радиусе X км»
- «отсортировать по расстоянию»
Eloquent scope помогает избежать дублирования Haversine-запросов.
Можно вынести это в Trait, чтобы использовать в нескольких моделях.
Или даже оформить как Package для использования в разных проектах.
@WebDev_Plus
❤1
Скоро можно будет попрощаться с Date() в JavaScript.
Temporal API уже находится на стадии Stage 4 и поддерживается в Chrome, Edge и Firefox. Поддержка — около 65% браузеров!
Новый способ работы с датами и временем.
С большим количеством утилит и улучшений:
@WebDev_Plus
Temporal API уже находится на стадии Stage 4 и поддерживается в Chrome, Edge и Firefox. Поддержка — около 65% браузеров!
Новый способ работы с датами и временем.
С большим количеством утилит и улучшений:
@WebDev_Plus
❤🔥6
push(), pop(), shift() и unshift() в JavaScript 👇
Это базовые методы массива, используемые для добавления или удаления элементов в начале или в конце массива.
Важные моменты:
▪️ push() → добавляет элементы в конец массива
▪️ pop() → удаляет последний элемент
▪️ shift() → удаляет первый элемент
▪️ unshift() → добавляет элементы в начало массива
Помните, что все эти методы изменяют исходный массив (они мутабельные).
@WebDev_Plus
Это базовые методы массива, используемые для добавления или удаления элементов в начале или в конце массива.
Важные моменты:
Помните, что все эти методы изменяют исходный массив (они мутабельные).
@WebDev_Plus
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Laravel tip
Знал ли ты, что
Больше никаких пропущенных дней в графиках.
@WebDev_Plus
Знал ли ты, что
CarbonPeriod может генерировать все даты в заданном диапазоне?Больше никаких пропущенных дней в графиках.
@WebDev_Plus
❤2
В Next.js 16.2 ошибки браузера теперь напрямую прокидываются в терминал во время разработки
Больше не нужно переключаться в консоль браузера, чтобы дебажить client-side ошибки.
Особенно полезно для AI-агентов, которые не могут открыть DevTools и посмотреть ошибки в браузере.
@WebDev_Plus
Больше не нужно переключаться в консоль браузера, чтобы дебажить client-side ошибки.
Особенно полезно для AI-агентов, которые не могут открыть DevTools и посмотреть ошибки в браузере.
@WebDev_Plus
На случай, если ты не знал: React концептуально не изобрёл RSC, SSR или Hydration.
SSR — это по сути Express:
RSC — это Pug:
Hydration — это jQuery:
Отсюда и следствия: в SSR нет
@WebDev_Plus
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
Точно измеряйте производительность своего кода
Узнайте больше👇
https://developer.mozilla.org/en-US/docs/Web/API/Performance/mark
@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
Свойство
(требует дополнительной настройки для
Полное демо👇
https://github.com/SidKH/gist-of-next-demos/blob/cursor/view-transition-transition-types-demo/README.md
@WebDev_Plus
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-совет:
Используйте
@WebDev_Plus
Используйте
svh, чтобы мобильная адресная строка не скрывала ваш UI. Это гарантирует точное соответствие видимой области экрана.@WebDev_Plus
❤1
React / JS / TS приём
Используйте символы (
Этот пример провайдера в React:
- позволяет передавать
- при этом всё ещё проверяет, что пользователь не забыл обернуть в
Бывают случаи, когда
@WebDev_Plus
Используйте символы (
Symbol) вместо null/undefined для представления отсутствующих значений.Этот пример провайдера в React:
- позволяет передавать
null- при этом всё ещё проверяет, что пользователь не забыл обернуть в
<Provider>Бывают случаи, когда
null — это вполне валидное значение контекста (ctx).@WebDev_Plus
❤2
Это поможет вашим пользователям не уходить со страницы случайно — особенно при прокрутке таблицы или слайдера.
Запомните мои слова😁
@WebDev_Plus
Запомните мои слова
@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:
И используйте его, чтобы дать волю своему ИИ и создавать крутые демки😶
@WebDev_Plus
Верстка и измерение текста были последним и самым большим узким местом для создания более интересных 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
Пример:
Что изменилось?
Теперь вам не нужно использовать препроцессоры, чтобы работать с вложенными селекторами. Всё доступно прямо в стандартном CSS
@WebDev_Plus
Теперь можно писать вложенные селекторы прямо в CSS, как в Sass, но без использования препроцессоров. Просто пишите чистый CSS
Пример:
.card {
color: black;
&:hover { color: blue; }
.title { font-weight: bold; }
}Что изменилось?
Теперь вам не нужно использовать препроцессоры, чтобы работать с вложенными селекторами. Всё доступно прямо в стандартном CSS
@WebDev_Plus
MDN Web Docs
CSS nesting - CSS | MDN
The CSS nesting module defines a syntax for nesting selectors, providing the ability to nest one style rule inside another, with the selector of the child rule relative to the selector of the parent rule.
❤5
Если вы знаете эти строки CSS, вы можете сверстать 80% макетов 👇
@WebDev_Plus
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