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