INTEGRITY Документация

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 каталог содержит распространенные символьные устройства:

Все операции с VFS являются синхронными. Можно использовать синхронный, асинхронный на основе callback или основанный на promise API, предоставляемый node:fs модуль, но все операции будут выполняться синхронно.

Временные метки файлов в VFS в настоящее время всегда устанавливаются на эпоху Unix (1970-01-01T00:00:00Z). Это означает, что операции, зависящие от меток времени, такие как fs.stat, всегда будет возвращать одну и ту же временную метку для всех файлов в VFS. Это временное ограничение, которое будет устранено в одном из будущих релизов.

Поскольку все временные файлы хранятся в памяти, общий размер всех временных файлов и директорий учитывается в пределах лимита памяти Worker. Если вы превысите этот лимит, экземпляр Worker будет остановлен и перезапущен.

Реализация файловой системы имеет следующие ограничения:

Следующие node:fs API не поддерживаются в Workers или поддерживаются лишь частично в Workers:

Полный node:fs API описан в документация Node.js для node:fs.