import { printBuildComplete } from './build/buildReport'; import type { Config } from '@react-router/dev/config'; /** * React Router v7 framework 模式配置。 * * - appDirectory: 源码根目录,routes.ts / root.tsx / entry.client.tsx 均位于此。 * - ssr: false —— 纯静态预渲染(SPA + prerender),不部署常驻 Node 服务,对 CF 加速零影响。 * 注意:ssr:false 仅关闭「运行时」服务端渲染;构建时仍会在 Node 端预渲染 root 及 prerender 列表中的路由, * 因此路由代码必须 SSR 安全(不能在渲染期直接访问 window 等浏览器 API)。 * - prerender: 预渲染的静态路径列表。多语言采用路径前缀(/en/...),当前仅启用 en-US, * 将来启用其它语言时把对应 /xx/... 路径追加进来即可。未列出的路径由 SPA fallback 承载。 */ export default { appDirectory: 'src', // 输出目录改为 dist(默认是 build,会与项目里存放自研 Vite 插件的 build/ 目录冲突并被清空)。 // 产物结构:dist/client(静态站点,含预渲染 HTML 与资源)、dist/server(构建期预渲染用,ssr:false 时运行时不部署)。 buildDirectory: 'dist', ssr: false, async prerender() { return ['/en/home', '/en/privacy', '/en/terms-of-service']; }, // SSG 构建收尾。buildEnd 晚于 client/ssr 双环境构建、prerender、删除 server 目录等全部步骤, // 是整个 react-router build 的最后一个钩子,「🎉 恭喜打包完成」在此打印才真正是最后一行。 // 体积统计客户端产物目录 dist/client(此时 dist/server 已因 ssr:false 被删)。 async buildEnd({ reactRouterConfig }) { await printBuildComplete(`${reactRouterConfig.buildDirectory}/client`); }, } satisfies Config;