Files
lab/ts/web/nextjs/polaris/patches/README.md
T
labmem 2c674b7f2d
Polaris CI / verify (push) Successful in 1m47s
feat(polaris)!: 改为 standalone 容器运行
将 Next.js 构建切换为 standalone,新增多阶段 Docker 镜像和非 root 运行。
CI 改为启动服务检查页面与静态资源,并移除静态导出校验。

BREAKING CHANGE: 不再生成 out/ 静态产物,部署需运行 Node 服务容器。
2026-10-12 17:42:26 +08:00

1.6 KiB

Next.js Windows 静态导出历史补丁

原因与范围

next@16.3.3 的静态导出器将 path.relative() 产生的文件系统路径直接用于 RSC segment 文件名编码。Windows 的反斜杠不会被编码器转换为点号,导致浏览器请求扁平文件名、实际文件却落在嵌套目录。

补丁只修改导出器的 CommonJS / ESM 两份入口,在文件名编码前用系统路径分隔符拆分并以 / 连接。读取源文件仍使用原始文件系统路径。Linux/macOS 的 / 路径保持不变,浏览器运行时代码不变。

安装与验证

补丁通过 pnpm-workspace.yaml 的精确版本 patchedDependencies 和锁文件登记,正常安装会自动应用,无需手动编辑 node_modules。

corepack pnpm install --frozen-lockfile
corepack pnpm build

当前项目使用 standalone 服务端输出,不再生成 out/ 或执行静态导出检查。补丁暂时保留以维持锁文件中的安装约定;服务端产物和 HTTP 路由由 Gitea CI 验证。

后续升级

补丁仅绑定 next@16.3.3,不会自动迁移到其他版本。升级 Next.js 时先评估能否移除这个不再服务当前部署方式的补丁;如果恢复静态导出,再单独验收 Windows 路径与浏览器导航。

决定移除时,同步清理 pnpm 的补丁登记和补丁文件,更新锁文件,并保留服务端 HTTP 回归检查。