В Node.js появился экспериментальный модуль виртуальной файловой системы
Node.js получил node:vfs для работы с виртуальными файлами, каталогами и архивами без размещения данных на физическом диске.
В среде выполнения Node.js появился экспериментальный модуль node:vfs. Он позволяет организовывать файлы и каталоги в виртуальном пространстве, не размещая их напрямую на физическом диске. Первая версия функциональности вошла в Node.js 26.4.0, а в последующих выпусках модуль получил интеграцию с загрузчиком и поддержку архивов.
Для включения виртуальной файловой системы требуется запустить Node.js с флагом --experimental-vfs. Модуль объединяет провайдер хранения данных с интерфейсом, близким к стандартному node:fs. Вызов mount() создает изолированное пространство имен, а путь точки монтирования выбирается самой средой выполнения. В POSIX-системах используется путь вроде /dev/null/vfs/0, в Windows — пространство имен, связанное с null-устройством.
Путь внутри смонтированной системы принадлежит только этому виртуальному дереву. Если файл там не найден, Node.js не продолжает поиск на физическом диске. Это позволяет направлять операции чтения и загрузки модулей в заранее выбранное хранилище, сохраняя стандартные правила разрешения пакетов, включая поиск package.json. Точка монтирования одновременно выступает границей разрешения модулей.
Провайдеры и работа с кэшем
В состав Node.js вошли несколько публичных провайдеров. MemoryProvider хранит структуру в оперативной памяти, RealFSProvider отображает существующие директории, а ZipProvider предназначен для работы с ZIP-архивами. Для одиночных исполняемых файлов используется внутренний провайдер SEA. Специализированные варианты, например SqliteProvider, в ядро Node.js не включены.
При размонтировании виртуального дерева Node.js удаляет связанные с ним записи из кэша загрузчика. Очистка затрагивает модули CommonJS, кэш загрузки ESM и метаданные пакетов. Это позволяет повторно монтировать хранилища без сохранения старых результатов разрешения модулей.
Нативные аддоны и одиночные приложения
Выпуск Node.js 26.9.0 добавил загрузку нативных аддонов с расширением .node из виртуальной файловой системы. Чтобы передать бинарные данные системному динамическому загрузчику, на Linux Node.js создает анонимный файловый дескриптор в памяти, а на других операционных системах использует временный файл.
В Node.js 26.10.0 появилась поддержка загрузки разделяемых библиотек через node:ffi. Для одиночных исполняемых приложений добавили параметр "useVfs": true. Он монтирует упакованные ресурсы в режиме только для чтения и запускает главный скрипт из виртуального дерева.
В том же релизе появились флаги командной строки --vfs-load и --vfs-mount. Первый монтирует виртуальную систему и запускает указанную точку входа, второй выполняет монтирование без выбора точки входа. Функция registerProvider позволяет зарегистрировать пользовательские форматы упаковки до создания стартовых монтирований.
Ограничения и совместимость
Виртуальная файловая система не предназначена для изоляции или контроля доступа. Она не блокирует запуск процессов и не мешает коду обращаться к реальным путям на диске. При включенной модели разрешений Node.js для монтирования требуется флаг --allow-fs-vfs, а для использования FFI — --allow-ffi.
Сторонняя библиотека @platformatic/vfs обновилась до версии 0.5.0 и получила поддержку нового API монтирования для Node.js 22 и более поздних версий. При этом пользовательские реализации не предоставляют встроенную поддержку ZIP-провайдера, интеграцию с SEA и загрузку нативных аддонов.
Сообщить о проблеме в публикации
Обращение принято Обращение будет рассмотрено. По результатам проверки публикация может быть исправлена, дополнена, временно скрыта или удалена.
Читайте новые материалы журнала — свежие сюжеты каждый день.
На главную

