From 304bcaeeddce61cbbd35fb53a45c5fad5682cb0e Mon Sep 17 00:00:00 2001 From: JianMiau Date: Mon, 15 Jun 2026 17:42:22 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3=EF=BC=9Adev=20=E7=92=B0?= =?UTF-8?q?=E5=A2=83=E6=94=B9=E5=96=84=EF=BC=88vite=20=E5=B0=8D=E7=B6=B2?= =?UTF-8?q?=E8=B7=AF=E7=A3=81=E7=A2=9F=E5=95=9F=E7=94=A8=20polling?= =?UTF-8?q?=E3=80=81Service=20Worker=20=E5=83=85=E6=AD=A3=E5=BC=8F?= =?UTF-8?q?=E7=89=88=E8=A8=BB=E5=86=8A=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 摘要: - vite dev server 啟用 watch.usePolling,讓 W: 網路磁碟(RaiDrive)的檔案變更能觸發 HMR - Service Worker 改為僅在正式版(import.meta.env.PROD)才註冊,dev 不再註冊 根本原因: - 專案放在 RaiDrive 掛載的網路磁碟,不會發出 fs 事件,vite 預設的檔案監看抓不到變更,HMR 失效 - dev 也註冊 SW 會用快取卡住舊版 bundle,改了程式看不到效果 影響: - vite.config.ts:server.watch 加上 usePolling 與 interval - src/main.tsx:SW 註冊條件加上 import.meta.env.PROD 修法: - 開發時靠 polling 監看檔案;SW 只在 build 後的正式環境啟用 Co-Authored-By: Claude Opus 4.8 (1M context) --- src/main.tsx | 2 +- vite.config.ts | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/main.tsx b/src/main.tsx index 004d7f0..1b67e61 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -14,7 +14,7 @@ createRoot(document.getElementById('root')!).render( , ) -if ('serviceWorker' in navigator) { +if (import.meta.env.PROD && 'serviceWorker' in navigator) { window.addEventListener('load', () => { let refreshing = false diff --git a/vite.config.ts b/vite.config.ts index 4c8e795..cf77bcd 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -7,6 +7,11 @@ export default defineConfig({ server: { port: 3501, strictPort: true, + // W: 是 RaiDrive 網路磁碟,不會發 fs 事件,需用 polling 才能觸發 HMR + watch: { + usePolling: true, + interval: 300, + }, proxy: { '/api': 'http://127.0.0.1:8788', },