Том Уэллинг стал героем вирусного обсуждения после публикации фото из отеля «ПСЖ» обыграл «Манчестер Сити» со счётом 4:2 в Лиге чемпионов На фестивале «Маяк» показали фильмы Тимы Анисимова, Никиты Троценко и Павла Лунгина В России насчитали 7,88 млн единиц коммерческого транспорта В Кемерово продолжается расследование смерти Татула Петросяна Зеленский согласился провести выборы при 60-дневном перемирии Блогер Егорик сравнил работу с зумерами и миллениалами Wildberries начал тестировать сервис объявлений об услугах частных специалистов В RuStore появился платный российский мессенджер «Молния» FIS усилила проверку документов Александра Большунова для нейтрального статуса Что такое «Mar-a-Lago face» и почему в нём увидели политический стиль Ривалдо, Снейдер и другие известные футболисты приехали в Москву на премию имени Симоняна Анастасия Волочкова заступилась за Лолиту после критики Яны Поплавской ITMS объявила о смене названия на BFT «Яндекс» сообщил о сбоях в работе «Алисы» после повреждения двух дата-центров Цены на бензин снизились в 31 регионе России за неделю Минцифры заявило о работе над защитой дата-центров после атак на инфраструктуру «Яндекса» Ирина Дубцова рассказала о музыкальном дебюте сына Нигерия усилила борьбу с мошенниками, выдающими себя за «принцев» Антон Винер рассказал о театральном предложении второй жене
Лента новостей
Технологии

В Node.js появился экспериментальный модуль виртуальной файловой системы

Node.js получил node:vfs для работы с виртуальными файлами, каталогами и архивами без размещения данных на физическом диске.

В Node.js появился экспериментальный модуль виртуальной файловой системы
Фото: Хабр

В среде выполнения 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 и загрузку нативных аддонов.

Источник
404 Media

Читайте новые материалы журнала — свежие сюжеты каждый день.

На главную