From a90c39876b43617fd668ea06013eb23066489936 Mon Sep 17 00:00:00 2001 From: chenhang Date: Mon, 6 Jul 2026 11:48:57 +0800 Subject: [PATCH] fix(deploy): include serwist runtime in container --- Dockerfile | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ next.config.ts | 10 ++++++++++ 2 files changed, 60 insertions(+) diff --git a/Dockerfile b/Dockerfile index 25c9602d..a6e91791 100644 --- a/Dockerfile +++ b/Dockerfile @@ -41,6 +41,56 @@ COPY --from=builder /app/public ./public COPY --from=builder --chown=nextjs:nodejs /app/.next/standalone ./ COPY --from=builder --chown=nextjs:nodejs /app/.next/static ./.next/static +RUN set -eux; \ + esbuild_pkg="$(find node_modules/.pnpm -path '*/node_modules/esbuild/package.json' -print -quit)"; \ + esbuild_binary_pkg="$(find node_modules/.pnpm -path '*/node_modules/@esbuild/linux-*/package.json' -print -quit)"; \ + idb_pkg="$(find node_modules/.pnpm -path '*/node_modules/idb/package.json' -print -quit)"; \ + serwist_pkg="$(find node_modules/.pnpm -path '*/node_modules/serwist/package.json' -print -quit)"; \ + serwist_turbopack_pkg="$(find node_modules/.pnpm -path '*/node_modules/@serwist/turbopack/package.json' -print -quit)"; \ + serwist_utils_pkg="$(find node_modules/.pnpm -path '*/node_modules/@serwist/utils/package.json' -print -quit)"; \ + if [ -n "$esbuild_pkg" ] && [ -n "$esbuild_binary_pkg" ]; then \ + esbuild_pkg="${esbuild_pkg%/package.json}"; \ + esbuild_binary_pkg="${esbuild_binary_pkg%/package.json}"; \ + esbuild_binary_name="$(basename "$esbuild_binary_pkg")"; \ + rm -rf node_modules/esbuild; \ + ln -s "/app/$esbuild_pkg" node_modules/esbuild; \ + mkdir -p node_modules/@esbuild "$esbuild_pkg/node_modules/@esbuild"; \ + rm -rf "node_modules/@esbuild/$esbuild_binary_name" "$esbuild_pkg/node_modules/@esbuild/$esbuild_binary_name"; \ + ln -s "/app/$esbuild_binary_pkg" "node_modules/@esbuild/$esbuild_binary_name"; \ + ln -s "/app/$esbuild_binary_pkg" "$esbuild_pkg/node_modules/@esbuild/$esbuild_binary_name"; \ + fi; \ + if [ -n "$serwist_pkg" ]; then \ + serwist_pkg="${serwist_pkg%/package.json}"; \ + rm -rf node_modules/serwist; \ + ln -s "/app/$serwist_pkg" node_modules/serwist; \ + fi; \ + if [ -n "$idb_pkg" ]; then \ + idb_pkg="${idb_pkg%/package.json}"; \ + rm -rf node_modules/idb; \ + ln -s "/app/$idb_pkg" node_modules/idb; \ + if [ -n "$serwist_pkg" ]; then \ + rm -rf "$serwist_pkg/node_modules/idb"; \ + ln -s "/app/$idb_pkg" "$serwist_pkg/node_modules/idb"; \ + fi; \ + fi; \ + if [ -n "$serwist_turbopack_pkg" ]; then \ + serwist_turbopack_pkg="${serwist_turbopack_pkg%/package.json}"; \ + mkdir -p node_modules/@serwist; \ + rm -rf node_modules/@serwist/turbopack; \ + ln -s "/app/$serwist_turbopack_pkg" node_modules/@serwist/turbopack; \ + fi; \ + if [ -n "$serwist_utils_pkg" ]; then \ + serwist_utils_pkg="${serwist_utils_pkg%/package.json}"; \ + mkdir -p node_modules/@serwist; \ + rm -rf node_modules/@serwist/utils; \ + ln -s "/app/$serwist_utils_pkg" node_modules/@serwist/utils; \ + if [ -n "$serwist_pkg" ]; then \ + mkdir -p "$serwist_pkg/node_modules/@serwist"; \ + rm -rf "$serwist_pkg/node_modules/@serwist/utils"; \ + ln -s "/app/$serwist_utils_pkg" "$serwist_pkg/node_modules/@serwist/utils"; \ + fi; \ + fi + USER nextjs EXPOSE 3000 diff --git a/next.config.ts b/next.config.ts index a3db5988..a9023142 100644 --- a/next.config.ts +++ b/next.config.ts @@ -17,6 +17,16 @@ const nextConfig: NextConfig = { // 关闭静态优化以规避 16.2.7 global-error prerender bug staticGenerationRetryCount: 0, }, + outputFileTracingIncludes: { + "/serwist/*": [ + "./src/app/sw.ts", + "./node_modules/.pnpm/@serwist+*/node_modules/@serwist/**/*", + "./node_modules/.pnpm/idb@*/node_modules/idb/**/*", + "./node_modules/.pnpm/serwist@*/node_modules/serwist/**/*", + "./node_modules/.pnpm/esbuild@*/node_modules/esbuild/**/*", + "./node_modules/.pnpm/@esbuild+linux-*@*/node_modules/@esbuild/linux-*/**/*", + ], + }, images: { remotePatterns: [ {