← Cloudflare Workers / workers / runtime-apis / nodejs
fs
Вы можете использовать node:fs ↗ для доступа к виртуальной файловой
системе в Workers.
node:fs модуль доступен в средах выполнения Workers, поддерживающих совместимость
с Node.js, при использовании nodejs_compat флаг совместимости. Любой Worker,
работающий с nodejs_compat включено и с датой совместимости
2025-09-01 или более поздней версии будут иметь доступ к node:fs по умолчанию. Также можно
включить node:fs в Workers с более ранней датой
совместимости с помощью комбинации nodejs_compat и enable_nodejs_fs_module
флаги. Чтобы отключить node:fs вы можете задать disable_nodejs_fs_module флаг.
import { readFileSync, writeFileSync } from "node:fs";
const config = readFileSync("/bundle/config.txt", "utf8");
writeFileSync("/tmp/abc.txt", "Hello, world!");Workers Virtual File System (VFS) представляет собой файловую систему в памяти, которая позволяет
читать модули, включенные в бандл вашего Worker, как файлы только для чтения, обращаться к
каталогу для записи временных файлов, а также использовать общие
символьные устройства ↗ например
/dev/null, /dev/random, /dev/full, а также /dev/zero.
Изначально структура каталогов выглядит так:
/bundle
└── (one file for each module in your Worker bundle)
/tmp
└── (empty, but you can write files, create directories, symlinks, etc)
/dev
├── null
├── random
├── full
└── zero /bundle каталог содержит файлы всех модулей, включенных в ваш
бандл Worker, которые можно читать с помощью таких API, как readFileSync или
read(...), и т. д. Они всегда доступны только для чтения. Чтение из bundle
может быть полезным, когда нужно прочитать конфигурационный файл или шаблон.
import { readFileSync } from "node:fs";
// The config.txt file would be included in your Worker bundle.
// Refer to the Wrangler documentation for details on how to
// include additional files.
const config = readFileSync("/bundle/config.txt", "utf8");
export default {
async fetch(request) {
return new Response(`Config contents: ${config}`);
},
}; /tmp каталог доступен для записи, и вы можете создавать в нем временные файлы
или каталоги. В этом каталоге также можно создавать символьные ссылки. Однако
содержимое /tmp не сохраняются и уникальны для каждого запроса. Это значит,
что файлы, созданные в /tmp в контексте одного запроса будет недоступно в других параллельных или последующих запросах.
import { writeFileSync, readFileSync } from "node:fs";
export default {
fetch(request) {
// The file `/tmp/hello.txt` will only exist for the duration
// of this request.
writeFileSync("/tmp/hello.txt", "Hello, world!");
const contents = readFileSync("/tmp/hello.txt", "utf8");
return new Response(`File contents: ${contents}`);
},
}; /dev каталог содержит распространенные символьные устройства:
/dev/null: Нулевое устройство, которое отбрасывает все данные, записанные в него, и возвращает EOF при чтении./dev/random: Устройство, которое при чтении предоставляет случайные байты и отбрасывает все данные, записанные в него. Чтение из/dev/randomразрешен только в рамках контекста запроса./dev/full: Устройство, которое при чтении всегда возвращает EOF и отбрасывает все записанные в него данные./dev/zero: Устройство, которое при чтении предоставляет бесконечный поток нулевых байт и отбрасывает все данные, записанные в него.
Все операции с VFS являются синхронными. Можно использовать синхронный,
асинхронный на основе callback или основанный на promise API, предоставляемый node:fs модуль,
но все операции будут выполняться синхронно.
Временные метки файлов в VFS в настоящее время всегда устанавливаются на эпоху Unix
(1970-01-01T00:00:00Z). Это означает, что операции, зависящие от меток времени,
такие как fs.stat, всегда будет возвращать одну и ту же временную метку для всех файлов в VFS.
Это временное ограничение, которое будет устранено в одном из будущих релизов.
Поскольку все временные файлы хранятся в памяти, общий размер всех временных файлов и директорий учитывается в пределах лимита памяти Worker. Если вы превысите этот лимит, экземпляр Worker будет остановлен и перезапущен.
Реализация файловой системы имеет следующие ограничения:
- Максимальная общая длина пути к файлу составляет 4096 символов, включая
разделители пути. Поскольку внутренне пути обрабатываются как file URL, при проверке
лимита учитывается процентное кодирование специальных символов и декодирование
символов, не требующих кодирования, до того как выполняется проверка лимита. Например,
путь
/tmp/abcde%66/ghi%zz' is 18 characters long because the%66does not need to be percent-encoded and is therefore counted as one character, while the%zz` является недопустимым percent-encoding и считается как 3 символа. - Максимальное количество сегментов пути: 48. Например, путь
/a/b/cсостоит из 3 сегментов. - Максимальный размер одного файла составляет 128 MB в общей сложности.
Следующие node:fs API не поддерживаются в Workers или поддерживаются лишь частично
в Workers:
fs.watchиfs.watchFileоперации для отслеживания изменений файлов.-
fs.globSync()и другие glob API пока не реализованы. -
forceпараметр вfs.rmAPI пока не реализован. - Временные метки файлов всегда устанавливаются на эпоху Unix (
1970-01-01T00:00:00Z). - Права доступа к файлам и владение файлами не поддерживаются.
Полный node:fs API описан в документация Node.js для node:fs ↗.