← Cloudflare Workers / workers / testing / miniflare / migrations
Migrace z verze 2
Miniflare v3 nyní používá workerd ↗, open source
runtime Cloudflare Workers. Jde o stejný runtime, jaký běží
na síti Cloudflare, což zajišťuje kompatibilitu na úrovni jednotlivých chyb a prakticky
odstraňuje rozdíly v chování. Více informací najdete v
Miniflare v3 ↗ a
Oznámení k Wrangleru v3 ↗ více
informací.
Změny CLI
Miniflare v3 už neobsahuje samostatné CLI. Chcete-li dosáhnout stejné funkčnosti, budete muset přejít na Wrangler. Wrangler v3 používá ve výchozím nastavení Miniflare v3. Chcete-li spustit lokální vývojový server, spusťte:
$ npx wrangler@3 devPokud byste ve Wrangleru chtěli vidět nějaké funkce z Miniflare CLI, otevřete prosím issue na GitHub ↗.
Změny API
Snažili jsme se zachovat rozhraní API nástroje Miniflare v3 co nejblíže verzi Miniflare v2,
ale mnoho možností a metod bylo s přechodem na
open-source workerd runtime. Viz Úvodní návod pro novou dokumentaci API
Aktualizované možnosti
-
kvNamespaces/r2Buckets/d1Databases- Kromě
string[]s, tyto možnosti nyní přijímajíRecord<string, string>s, které mapují názvy bindings na ID namespace, ID bucketu nebo ID databáze. To znamená, že více Workerů se může připojit ke stejnému namespace, bucketu nebo databázi pod různými názvy.
- Kromě
-
queueBindings- Přejmenováno na
queueProducers. Přijímá buďRecord<string, string>který mapuje názvy bindings na názvy front, nebostring[]názvů bindingů na fronty se stejným názvem.
- Přejmenováno na
-
queueConsumers-
Buď přijímá
Record<string, QueueConsumerOptions>mapující názvy front na možnosti konzumenta, nebostring[]názvů front, které se mají zpracovávat s výchozími možnostmi.QueueConsumerOptionsmá následující typ:interface QueueConsumerOptions { // /queues/platform/configuration/#consumer maxBatchSize?: number; // default: 5 maxBatchTimeout?: number /* seconds */; // default: 1 maxRetries?: number; // default: 2 deadLetterQueue?: string; // default: none }
-
-
cfFetch- Přejmenováno na
cf. Buď přijímáboolean,string(jako předtím), nebo objekt, který použijecfobjekt pro příchozí požadavky.
- Přejmenováno na
Odebrané možnosti
-
wranglerConfigPath/wranglerConfigEnv- Miniflare už nezpracovává konfiguraci Wrangleru. Pro programové
spuštění Workeru na základě konfigurace Wrangleru použijte
unstable_dev()API.
- Miniflare už nezpracovává konfiguraci Wrangleru. Pro programové
spuštění Workeru na základě konfigurace Wrangleru použijte
-
packagePath- Miniflare už nenačítá cesty ke skriptům z
package.jsonsoubory. PoužijtescriptPathmožnost, kterou místo toho zadejte svůj skript.
- Miniflare už nenačítá cesty ke skriptům z
-
watch- API Miniflare je určeno především pro testovací scénáře, kde sledování
souborů obvykle není potřeba. Tato možnost sloužila k povolení CLI
nástroje Miniflare, které bylo nyní odstraněno. Pokud potřebujete sledovat
soubory, zvažte použití samostatného sledovače souborů, například
fs.watch()↗ nebochokidar↗, a volánísetOptions()vaší původní konfigurací při každé změně.
- API Miniflare je určeno především pro testovací scénáře, kde sledování
souborů obvykle není potřeba. Tato možnost sloužila k povolení CLI
nástroje Miniflare, které bylo nyní odstraněno. Pokud potřebujete sledovat
soubory, zvažte použití samostatného sledovače souborů, například
-
logUnhandledRejections- Neošetřená odmítnutí lze ve Workers zpracovat pomocí
addEventListener("unhandledrejection")↗.
- Neošetřená odmítnutí lze ve Workers zpracovat pomocí
-
globals- Vkládání libovolných globálních proměnných není podporováno
workerd↗. Pokud používáte service worker,bindingsbudou vloženy jako globální proměnné, musí však být serializovatelné do JSON.
- Vkládání libovolných globálních proměnných není podporováno
-
https/httpsKey(Path)/httpsCert(Path)/httpsPfx(Path)/httpsPassphrase- Miniflare zatím nepodporuje spouštění serverů HTTPS. Tyto možnosti mohou být v budoucí verzi znovu přidány.
-
cronsworkerd↗ zatím nepodporuje spouštění naplánovaných událostí. Tato možnost může být v budoucí verzi znovu přidána.
-
mounts-
Miniflare už nerozlišuje nadřazené a podřízené Workery. Místo toho lze všechny Workery definovat na stejné úrovni pomocí nového
workersmožnost. Zde je příklad, který pomocí service bindingu zvyšuje hodnotu ve sdíleném KV namespace:import { Miniflare, Response } from "miniflare"; const message = "The count is "; const mf = new Miniflare({ // Options shared between Workers such as HTTP and persistence configuration // should always be defined at the top level. host: "0.0.0.0", port: 8787, kvPersist: true, workers: [ { name: "worker", kvNamespaces: { COUNTS: "counts" }, serviceBindings: { INCREMENTER: "incrementer", // Service bindings can also be defined as custom functions, with access // to anything defined outside Miniflare. async CUSTOM(request) { // `request` is the incoming `Request` object. return new Response(message); }, }, modules: true, script: `export default { async fetch(request, env, ctx) { // Get the message defined outside const response = await env.CUSTOM.fetch("http://host/"); const message = await response.text(); // Increment the count 3 times await env.INCREMENTER.fetch("http://host/"); await env.INCREMENTER.fetch("http://host/"); await env.INCREMENTER.fetch("http://host/"); const count = await env.COUNTS.get("count"); return new Response(message + count); } }`, }, { name: "incrementer", // Note we're using the same `COUNTS` namespace as before, but binding it // to `NUMBERS` instead. kvNamespaces: { NUMBERS: "counts" }, // Worker formats can be mixed-and-matched script: `addEventListener("fetch", (event) => { event.respondWith(handleRequest()); }) async function handleRequest() { const count = parseInt((await NUMBERS.get("count")) ?? "0") + 1; await NUMBERS.put("count", count.toString()); return new Response(count.toString()); }`, }, ], }); const res = await mf.dispatchFetch("http://localhost"); console.log(await res.text()); // "The count is 3" await mf.dispose();
-
-
metaProvider-
cfobjekt aX-Forwarded-Proto/X-Real-IPhlavičky lze zadat při volánídispatchFetch()místo toho. Výchozícfobjekt lze zadat pomocí novéhocfmožnost také.
-
-
durableObjectAlarms- Miniflare nyní vždy povoluje alarmy Durable Object.
-
globalAsyncIO/globalTimers/globalRandomworkerd↗ nedokáže podporovat tyto možnosti bez zásadních změn.
-
actualTime- Miniflare nyní vždy vrací aktuální čas.
-
inaccurateCpu- Nastavte
inspectorPort: 9229možnost pro povolení V8 inspectoru. Navštivtechrome://inspectv Google Chrome, abyste otevřeli DevTools a spustili profilování CPU.
- Nastavte
Aktualizované metody
setOptions()- Miniflare v3 nyní vyžaduje předání celého konfiguračního objektu místo dílčí úpravy.
Odebrané metody
reload()- Zavolejte
setOptions()původním konfiguračním objektem pro opětovné načtení Miniflare.
- Zavolejte
createServer()/startServer()- Miniflare nyní vždy spouští
workerd↗ server naslouchající na nakonfigurovanémhostaport, takže tyto metody jsou nadbytečné.
- Miniflare nyní vždy spouští
dispatchScheduled()/startScheduled()- Funkčnost
dispatchSchedulednyní lze provést pomocígetWorker(). Další informace najdete v dokumentace k naplánovaným událostem.
- Funkčnost
dispatchQueue()- Použijte
queue()metodu na service bindings nebo queue producer bindings místo toho.
- Použijte
getGlobalScope()/getBindings()/getModuleExports()- Tyto metody vracely objekty zevnitř sandboxu Workers. Jelikož
Miniflare nyní používá
workerd↗, který běží v jiném procesu, již tyto metody nelze podporovat.
- Tyto metody vracely objekty zevnitř sandboxu Workers. Jelikož
Miniflare nyní používá
addEventListener()/removeEventListener()- Miniflare už nevydává
reloadudálosti. Jelikož Miniflare už soubory nesleduje, k opětovnému načtení dojde jen při inicializaci nebosetOptions()volání. V takových případech je možné počkat na reload buď pomocíawait mf.readyneboawait mf.setOptions()v uvedeném pořadí.
- Miniflare už nevydává
Response#waitUntil()workerd↗ nepodporuje čekání na všechnywaitUntil()ové promisy.
Odebrané balíčky
@miniflare/*- Miniflare je nyní obsažen v jediném
miniflarebalíček.
- Miniflare je nyní obsažen v jediném