Service Worker
Service Worker 是运行在浏览器后台的一个脚本,用于处理缓存和推送通知等任务。通过使用 Service Worker 适配器,你可以让用 Hono 构建的应用作为浏览器中的 FetchEvent 处理器运行。
本页展示了一个使用 Vite 创建项目的示例。
1. 初始化 (Setup)
首先,创建并进入你的项目目录:
mkdir my-appcd my-app
为项目创建必要的文件。创建一个 package.json 文件,内容如下:
{"name": "my-app","private": true,"scripts": {"dev": "vite dev"},"type": "module"}
同样,创建一个 tsconfig.json 文件,内容如下:
{"compilerOptions": {"target": "ES2020","module": "ESNext","lib": ["ES2020", "DOM", "WebWorker"],"moduleResolution": "bundler"},"include": ["./"],"exclude": ["node_modules"]}
接下来安装必要的模块:
npm i hononpm i -D vite
yarn add honoyarn add -D vite
pnpm add honopnpm add -D vite
bun add honobun add -D vite
2. Hello World
编辑 index.html:
<!doctype html><html><body><a href="/sw">Hello World by Service Worker</a><script type="module" src="/main.ts"></script></body></html>
main.ts 是一个用来注册 Service Worker 的脚本:
function register() {navigator.serviceWorker.register('/sw.ts', { scope: '/sw', type: 'module' }).then(function (_registration) {console.log('Register Service Worker: Success')},function (_error) {console.log('Register Service Worker: Error')})}function start() {navigator.serviceWorker.getRegistrations().then(function (registrations) {for (const registration of registrations) {console.log('Unregister Service Worker')registration.unregister()}register()})}start()
在 sw.ts 中,用 Hono 创建一个应用,并通过 Service Worker 适配器的 handle 函数将它注册到 fetch 事件上。这样,Hono 应用就可以拦截访问 /sw 的请求。
// To support types// https://github.com/microsoft/TypeScript/issues/14877declare const self: ServiceWorkerGlobalScopeimport { Hono } from 'hono'import { handle } from 'hono/service-worker'const app = new Hono().basePath('/sw')app.get('/', (c) => c.text('Hello World'))self.addEventListener('fetch', handle(app))
使用 fire()
fire() 函数会自动帮你调用 addEventListener(‘fetch’, handle(app)),让代码更加简洁。
import { Hono } from 'hono'import { fire } from 'hono/service-worker'const app = new Hono().basePath('/sw')app.get('/', (c) => c.text('Hello World'))fire(app)
3. 运行 (Run)
启动开发服务器:
npm run dev
yarn dev
pnpm run dev
bun run dev
默认情况下,开发服务器会运行在 5173 端口。打开浏览器访问 http://localhost:5173/ 完成 Service Worker 注册,然后访问 /sw 查看 Hono 应用的响应。
