Closed12
Remix PWA を試したい

このスクラップについて
このスクラップでは Remix PWA を試す過程について記録する。

プロジェクト作成
コマンド
cd ~/workspace
npm create remix@latest hello-remix-pwa
cd hello-remix-pwa
npm run dev

インストール
コマンド
npm i --save-dev @remix-pwa/dev
npm i --save @remix-pwa/worker-runtime @remix-pwa/sw

vite.config.ts
vite.config.ts
import { vitePlugin as remix } from "@remix-run/dev";
import { defineConfig } from "vite";
import tsconfigPaths from "vite-tsconfig-paths";
import { remixPWA } from "@remix-pwa/dev";
declare module "@remix-run/node" {
interface Future {
v3_singleFetch: true;
}
}
export default defineConfig({
plugins: [
remix({
future: {
v3_fetcherPersist: true,
v3_relativeSplatPath: true,
v3_throwAbortReason: true,
v3_singleFetch: true,
v3_lazyRouteDiscovery: true,
},
}),
tsconfigPaths(),
remixPWA(),
],
});

エントリー作成
コマンド
npx remix-pwa sw

勉強になりそう

entry.worker.ts
app/entry.worker.ts
/// <reference lib="WebWorker" />
import { WorkerDataFunctionArgs } from "@remix-pwa/sw";
export {};
declare let self: ServiceWorkerGlobalScope;
self.addEventListener("install", (event) => {
console.log("Service worker installed");
event.waitUntil(self.skipWaiting());
});
self.addEventListener("activate", (event) => {
console.log("Service worker activated");
event.waitUntil(self.clients.claim());
});
export const defaultFetchHandler = async ({
request,
}: WorkerDataFunctionArgs) => {
const response = await fetch(request);
console.log(request.url);
return response;
};
これで動くようになった、素晴らしい。

Hono を使ってみる
コマンド
npm i hono

entry.worker.ts
コマンド
const app = new Hono().basePath("/sw");
app.get("/", (c) => c.text("Hello World"));
export const defaultFetchHandler = async ({
request,
}: WorkerDataFunctionArgs) => {
const res = await app.fetch(request);
if (res.status === 404) {
return await fetch(request);
}
return res;
};
これで http://localhost:5173/sw にアクセスしたら Hello World
と表示されるようになった。
Hono の Service Worker 用の handle 関数のコードを参考にした。

一旦これでクローズ
まずはサービスワーカーが使えれば良いのでこれで一旦クローズしよう。

生の Vite PWA Plugin の方が良い?
使われている数を考えるとこちらの方が良いかも知れないと思えてきた。

Workbox という手もある
素晴らしい記事を発見した。
このスクラップは2025/01/20にクローズされました