Fusion CLI can optionally produce a SW bundle.
First create a src/sw.js
file with a default function export. This function should contains your service worker logic.
// src/sw.js
export default function swMain(...args) {
self.addEventListener("install" /* ... */);
self.addEventListener("fetch" /* ... */);
}
The service worker template function returns a string containing the bundled service worker code.
Any arguments passed to the template function will be serialized into the service worker code and passed as arguments to the main function exported in src/sw.js
. This allows for the service worker code to have dependencies not known at build-time such as environment variables.
import { swTemplate } from "fusion-cli/sw";
const sw = swTemplate({ foo: "bar" }, 12345);
app.middleware((ctx, next) => {
if (ctx.url === "/sw.js") {
ctx.body = sw;
}
return next();
});