← Cloudflare Workers / workers / runtime-apis / nodejs
fs
Můžete použít node:fs ↗ pro přístup k virtuálnímu souborovému
systému ve Workers.
node:fs modul je dostupný v runtime prostředích Workers, která podporují kompatibilitu
s Node.js pomocí nodejs_compat příznak kompatibility. Jakýkoli Worker
spuštěný s nodejs_compat zapnuto a s datem kompatibility
2025-09-01 nebo novější budou mít přístup k node:fs ve výchozím nastavení. Je
také možné zapnout node:fs na Workers se starším datem
kompatibility pomocí kombinace nodejs_compat a enable_nodejs_fs_module
příznaky. Chcete-li vypnout node:fs můžete nastavit disable_nodejs_fs_module příznak.
import { readFileSync, writeFileSync } from "node:fs";
const config = readFileSync("/bundle/config.txt", "utf8");
writeFileSync("/tmp/abc.txt", "Hello, world!");Workers Virtual File System (VFS) je paměťový souborový systém, který vám
umožňuje číst moduly zahrnuté ve vašem Worker bundlu jako soubory pouze pro čtení, přistupovat k
adresáři pro zápis dočasných souborů nebo přistupovat ke společným
znaková zařízení ↗ jako
/dev/null, /dev/random, /dev/full, a /dev/zero.
Struktura adresáře na začátku vypadá takto:
/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 adresář obsahuje soubory všech modulů zahrnutých ve vašem
balíčku Workeru, které můžete číst pomocí API jako readFileSync nebo
read(...), atd. Ty jsou vždy jen pro čtení. Čtení z balíčku
se hodí, když potřebujete načíst konfigurační soubor nebo šablonu.
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 adresář je zapisovatelný a můžete jej použít k vytváření dočasných souborů
nebo adresářů. V tomto adresáři můžete také vytvářet symlinky. Obsah
/tmp nejsou trvalé a jsou jedinečné pro každý požadavek. To znamená,
že soubory vytvořené ve /tmp v kontextu jednoho požadavku nebude
dostupná v jiných souběžných nebo následných požadavcích.
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 adresář obsahuje běžná znaková zařízení:
/dev/null: Nulové zařízení, které zahazuje veškerá do něj zapsaná data a při čtení vrací EOF./dev/random: Zařízení, které při čtení poskytuje náhodné bajty a zahazuje veškerá data do něj zapsaná. Čtení z/dev/randomje povoleno pouze v rámci kontextu požadavku./dev/full: Zařízení, které při čtení vždy vrací EOF a zahazuje veškerá data zapsaná do něj./dev/zero: Zařízení, které při čtení poskytuje nekonečný proud nulových bajtů a zahazuje veškerá data do něj zapsaná.
Všechny operace nad VFS jsou synchronní. Můžete použít synchronní,
asynchronní callback nebo API založené na promise, které poskytuje node:fs modul,
ale všechny operace budou probíhat synchronně.
Časová razítka souborů ve VFS jsou v současnosti vždy nastavena na unixovou epochu
(1970-01-01T00:00:00Z). To znamená, že operace, které se spoléhají na časová razítka,
jako fs.stat, vždy vrátí stejné časové razítko pro všechny soubory ve VFS.
Jde o dočasné omezení, které bude řešeno v některé z budoucích verzí.
Protože jsou všechny dočasné soubory uchovávány v paměti, celková velikost všech vytvořených dočasných souborů a adresářů se započítává do paměťového limitu Workeru. Pokud tento limit překročíte, instance Workeru bude ukončena a restartována.
Implementace souborového systému má následující omezení:
- Maximální celková délka cesty k souboru je 4096 znaků včetně oddělovačů cesty. Protože cesty jsou interně zpracovávány jako file URL, limit zohledňuje procentuální kódování speciálních znaků a dekóduje znaky, které kódování nevyžadují, dříve než dojde ke kontrole limitu. Například cesta
/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` is an invalid percent-encoding that is counted as 3 characters. - Maximální počet segmentů cesty je 48. Například cesta
/a/b/cmá 3 segmenty. - Maximální velikost jednotlivého souboru je celkem 128 MB.
Následující node:fs API nejsou ve Workers podporována, nebo jsou podporována pouze
částečně:
fs.watchafs.watchFileoperace pro sledování změn souborů.-
fs.globSync()a další glob API zatím nejsou implementována. -
forcemožnost vfs.rmAPI zatím není implementováno. - Časová razítka souborů jsou vždy nastavena na unixovou epochu (
1970-01-01T00:00:00Z). - Oprávnění k souborům a vlastnictví nejsou podporovány.
Kompletní node:fs API je zdokumentováno v Dokumentace Node.js pro node:fs ↗.