← Cloudflare Workers / workers / wrangler
Bundling
Ve výchozím nastavení Wrangler sloučí kód vašeho Workeru pomocí esbuild ↗. To znamená, že Wrangler má vestavěnou podporu pro import modulů z npm ↗ definované ve vašem package.json. Chcete-li zkontrolovat přesný kód, který Wrangler nahraje do Cloudflare, spusťte npx wrangler deploy --dry-run --outdir dist, který zobrazí kód vašeho Workeru po zabalení Wranglerem.
esbuild verze
Wrangler používá esbuild. Pravidelně aktualizujeme esbuild verze dodávaná s Wrangler a od esbuild je nástroj s verzí nižší než 1.0.0, proto mohou tyto změny občas zahrnovat i změny narušující zpětnou kompatibilitu ve způsobu fungování bundlování. Zejména můžeme zvýšit esbuild verze ve vedlejší verzi (minor) Wrangler.
Včetně modulů jiných než JavaScript
Bundling kódu vašeho Workeru vezme více modulů a sloučí je do jednoho souboru. Někdy můžete mít moduly, které nelze vložit přímo do balíčku. Například místo sloučení souboru Wasm do vašeho JavaScript Workeru budete chtít nahrát soubor Wasm jako samostatný modul, který lze importovat za běhu. Wrangler to ve výchozím nastavení podporuje pro následující typy souborů:
| Přípona modulu | Importovaný typ |
|---|---|
.txt |
string |
.html |
string |
.sql |
string |
.bin |
ArrayBuffer |
.wasm, .wasm?module |
WebAssembly.Module |
Viz Konfigurace bundlingu pro přizpůsobení těchto typů souborů.
Například s tímto importem text bude řetězec obsahující obsah example.txt:
import text from "./example.txt";Na tomto principu funguje také import Wasm, jak ukazuje následující příklad:
import wasm from "./example.wasm";
// Instantiate Wasm modules in the module scope
const instance = await WebAssembly.instantiate(wasm);
export default {
fetch() {
const result = instance.exports.exported_func();
return new Response(result);
},
};Najděte další moduly
Nastavením find_additional_modules na true ve vašem konfiguračním souboru, Wrangler projde strom souborů pod base_dir.
Všechny soubory, které odpovídají rules definujete, budou v nasazeném Workeru zahrnuty také jako nezabalené externí moduly.
Tento přístup je užitečný pro podporu líného načítání (lazy loading) velkých nebo dynamicky importovaných souborů JavaScript:
- Obvykle velký, líně importovaný soubor (například
await import("./large-dep.mjs")) by se zabalil přímo do vašeho entrypointu, čímž by se snížila účinnost lazy loading. Pokud se odpovídající pravidlo přidá dorules, pak by se tento soubor načetl a spustil za běhu až ve chvíli, kdy je skutečně importován. - Dříve dynamické importy založené na proměnné (například
await import(`./lang/${language}.mjs`)) by to za běhu vždy selhalo, protože Wrangler neměl žádnou možnost zjistit, které moduly má do nahrávaného balíčku zahrnout. Pokud zadáte pravidlo, které odpovídá všem těmto souborům, například{ "type": "EsModule", "globs": ["./lang/**/*.mjs"], "fallthrough": true }, zajistí, že tento modul bude k dispozici za běhu. - "Partial bundling" is supported when
find_additional_modulesjetrue, a zdrojový soubor odpovídá jednomu z nakonfigurovanýchrules, protože Wrangler ho pak bude považovat za "external" a nebude se ho snažit zabalit do vstupního souboru.
NODE_ENV
process.env.NODE_ENV je staticky nahrazeno v době sestavení jednou z následujících hodnot:
| Kontext | Hodnota |
|---|---|
wrangler dev |
"development" |
wrangler deploy nebo wrangler build |
"production" |
Můžete použít process.env.NODE_ENV pro podmíněné spuštění kódu na základě kontextu sestavení:
if (process.env.NODE_ENV === "development") {
console.log("Running in development mode");
}Protože process.env.NODE_ENV se nahrazuje v době sestavení, kód určený pouze pro vývoj lze odstranit z produkčního balíčku.
Výchozí hodnotu můžete přepsat nastavením NODE_ENV proměnnou prostředí při spuštění příkazu:
NODE_ENV=staging npx wrangler devPodmíněné exporty
Wrangler respektuje podmíněný exports pole ↗ v package.json. Díky tomu mohou vývojáři implementovat izomorfní knihovny, které mají odlišnou implementaci podle toho, ve kterém JavaScript runtime běží. Při bundlování se Wrangler pokusí načíst workerd klíč ↗. Viz repozitář Wrangler, kde najdete ukázkový izomorfní balíček ↗.
Zakázat bundling
Pokud vaše nástroje pro sestavení už produkují výstupy vhodné pro přímé nasazení na Cloudflare, můžete bundlování vypnout pomocí --no-bundle příznak příkazové řádky: npx wrangler deploy --no-bundle. Pokud bundlování vypnete, Wrangler váš kód nezpracuje a některé funkce, které bundlování Wrangler přináší (například minifikaci a vkládání polyfillů), nebudou k dispozici.
Použijte Custom Builds pro přizpůsobení toho, co Wrangler sbalí a nahraje do globální sítě Cloudflare, když použijete wrangler dev a wrangler deploy.
Vygenerovaná konfigurace Wrangler
Některé nástroje frameworků nebo vlastní procesy před sestavením vygenerují upravenou konfiguraci Wrangler, která se použije k nasazení kódu Workeru. Wrangler pak může tuto vygenerovanou konfiguraci použít automaticky místo původní konfigurace uživatele.
Viz Vygenerovaná konfigurace Wrangler s dalšími informacemi.