๐ Modules
Enabling Modules
Miniflare supports both the traditional service-worker and newer modules
formats for writing workers. To use the modules format, enable it with:
$ miniflare --modules # or -mwrangler.toml[build.upload]format = "modules"const mf = new Miniflare({ modules: true,});When using the API you must also pass the --experimental-vm-modules flag
to Node.js. This is added automatically when using the CLI.
You can now use modules worker scripts like the following:
export default { async fetch(request, env, ctx) { // - `request` is the incoming `Request` instance // - `env` contains bindings, KV namespaces, Durable Objects, etc // - `ctx` contains `waitUntil` and `passThroughOnException` methods return new Response("Hello Miniflare!"); }, async scheduled(controller, env, ctx) { // - `controller` contains `scheduledTime` and `cron` properties // - `env` contains bindings, KV namespaces, Durable Objects, etc // - `ctx` contains the `waitUntil` method console.log("Doing something scheduled..."); },};Module Rules
Miniflare supports all module types: ESModule, CommonJS, Text, Data and
CompiledWasm. You can specify additional module resolution rules as follows:
# Note all rules implicitly have the `fallthrough` option set to true$ miniflare --modules-rule "ESModule=**/*.js" --modules-rule "Text=**/*.txt"wrangler.toml[[build.upload.rules]]type = "ESModule"globs = ["**/*.js"][[build.upload.rules]]type = "Text"globs = ["**/*.txt"]const mf = new Miniflare({ modulesRules: [ { type: "ESModule", include: ["**/*.js"], fallthrough: true }, { type: "Text", include: ["**/*.txt"] }, ],});Default Rules
The following rules are automatically added to the end of your modules rules
list. You can override them by specifying rules matching the same globs:
[[build.upload.rules]]type = "ESModule"globs = ["**/*.mjs"][[build.upload.rules]]type = "CommonJS"globs = ["**/*.js", "**/*.cjs"]