From f911199c8e062fa6b2e03dcb1341edcf8c607282 Mon Sep 17 00:00:00 2001
From: Stephen Zhou <38493346+hyoban@users.noreply.github.com>
Date: Fri, 23 Jan 2026 11:35:14 +0800
Subject: [PATCH] chore: disable serwist in dev (#31424)
Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
---
web/app/components/provider/serwist.tsx | 41 ++++++++++++++++++++++++-
web/app/layout.tsx | 9 ++----
2 files changed, 43 insertions(+), 7 deletions(-)
diff --git a/web/app/components/provider/serwist.tsx b/web/app/components/provider/serwist.tsx
index 39a80f5ac2..2eef43a7d6 100644
--- a/web/app/components/provider/serwist.tsx
+++ b/web/app/components/provider/serwist.tsx
@@ -1,3 +1,42 @@
'use client'
-export { SerwistProvider } from '@serwist/turbopack/react'
+import { SerwistProvider } from '@serwist/turbopack/react'
+import { useEffect } from 'react'
+import { IS_DEV } from '@/config'
+import { isClient } from '@/utils/client'
+
+export function PWAProvider({ children }: { children: React.ReactNode }) {
+ if (IS_DEV) {
+ return {children}
+ }
+
+ const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ''
+ const swUrl = `${basePath}/serwist/sw.js`
+
+ return (
+
+ {children}
+
+ )
+}
+
+function DisabledPWAProvider({ children }: { children: React.ReactNode }) {
+ useEffect(() => {
+ if (isClient && 'serviceWorker' in navigator) {
+ navigator.serviceWorker.getRegistrations()
+ .then((registrations) => {
+ registrations.forEach((registration) => {
+ registration.unregister()
+ .catch((error) => {
+ console.error('Error unregistering service worker:', error)
+ })
+ })
+ })
+ .catch((error) => {
+ console.error('Error unregistering service workers:', error)
+ })
+ }
+ }, [])
+
+ return <>{children}>
+}
diff --git a/web/app/layout.tsx b/web/app/layout.tsx
index b970fddc7a..845cae2d4e 100644
--- a/web/app/layout.tsx
+++ b/web/app/layout.tsx
@@ -12,7 +12,7 @@ import { ToastProvider } from './components/base/toast'
import BrowserInitializer from './components/browser-initializer'
import { ReactScanLoader } from './components/devtools/react-scan/loader'
import { I18nServerProvider } from './components/provider/i18n-server'
-import { SerwistProvider } from './components/provider/serwist'
+import { PWAProvider } from './components/provider/serwist'
import SentryInitializer from './components/sentry-initializer'
import RoutePrefixHandle from './routePrefixHandle'
import './styles/globals.css'
@@ -40,9 +40,6 @@ const LocaleLayout = async ({
}) => {
const locale = await getLocaleOnServer()
- const basePath = process.env.NEXT_PUBLIC_BASE_PATH || ''
- const swUrl = `${basePath}/serwist/sw.js`
-
const datasetMap: Record = {
[DatasetAttr.DATA_API_PREFIX]: process.env.NEXT_PUBLIC_API_PREFIX,
[DatasetAttr.DATA_PUBLIC_API_PREFIX]: process.env.NEXT_PUBLIC_PUBLIC_API_PREFIX,
@@ -96,7 +93,7 @@ const LocaleLayout = async ({
className="color-scheme h-full select-auto"
{...datasetMap}
>
-
+
-
+