Встроенная виртуальная файловая система node:vfs вошла в состав Node.js

В состав среды выполнения Node.js вошел экспериментальный модуль node:vfs, позволяющий организовывать данные в виртуальные файлы и каталоги без их прямого размещения на физическом диске. Первая версия функциональности появилась в версии Node.js 26.4.0, после чего инструмент получил интеграцию с загрузчиком модулей и поддержку архивов. Для работы с виртуальной файловой системой требуется передать флаг --experimental-vfs.

Модуль объединяет провайдер хранения данных с интерфейсом, аналогичным стандартному модулю node:fs. Вызов метода mount() резервирует изолированное пространство имен, путь к которому выбирается автоматически средой исполнения. На системах POSIX используется путь вида /dev/null/vfs/0, а в Windows применяется соответствующее пространство имен null‑устройства. Запрошенный путь внутри смонтированной системы принадлежит исключительно этой виртуальной файловой системе, поэтому при отсутствии файла поиск на физическом диске не выполняется.

Поставщики данных

В ядро вошли встроенные публичные провайдеры: MemoryProvider для хранения структуры в оперативной памяти, RealFSProvider для отображения реальных директорий и ZipProvider для работы с ZIP‑архивами. Внутренний провайдер SEA используется при запуске одиночных исполняемых файлов, а специализированные решения вроде SqliteProvider в состав ядра не входят.

Алгоритмы разрешения пакетов и поиска файлов направляют операции ввода‑вывода в соответствующую виртуальную систему, не меняя стандартный механизм поиска package.json. Точка монтирования служит границей разрешения модулей. Размонтирование виртуального дерева приводит к очистке связанных с ним записей в кэше загрузчика, включая модули CommonJS, кэш загрузки ESM и метаданные пакетов.

Загрузка нативного кода и флаги запуска

Выпуск Node.js 26.9.0 добавил возможность загрузки нативных аддонов .node из виртуальной файловой системы. Для передачи бинарных данных динамическому загрузчику операционной системы Node.js создает анонимный файловый дескриптор в памяти на платформе Linux или временный файл на других операционных системах. В версии Node.js 26.10.0 появилась поддержка загрузки разделяемых библиотек через модуль node:ffi.

Одиночные исполняемые файлы (Single Executable Applications) получили параметр "useVfs": true, который монтирует упакованные ресурсы в режиме только для чтения и запускает главный скрипт из виртуального дерева. 

В релизе 26.10.0 также добавлены флаги командной строки --vfs-load для монтирования с запуском точки входа и --vfs-mount для монтирования без выбора точки входа. Функция registerProvider дает возможность регистрировать пользовательские форматы упаковки до создания стартовых монтирований.

Бесплатный базовый курс по JS

Рассказываем, как работать с переменными, типами данных, функциями и о многом другом!

Начать изучение →

Интеграция с экосистемой

Виртуальная файловая система не является изолированной средой безопасности или механизмом контроля доступа. Смонтированная система не препятствует выполнению процессов или обращению кода к реальным путям на диске. При включенной модели разрешений Node.js для выполнения монтирования требуется явный флаг --allow-fs-vfs, а для работы с FFI нужен флаг --allow-ffi. 

Сторонняя библиотека @platformatic/vfs обновилась до версии 0.5.0 с поддержкой нового API монтирования для Node.js 22 и новее. При этом пользовательские реализации не обеспечивают встроенную поддержку ZIP‑провайдера, интеграцию с SEA и загрузку нативных аддонов.

Источник: habr.com

0 0 голоса
Рейтинг новости
1
0
Подписаться
Уведомить о
0 комментариев