react-router.config.ts 1.8 KB

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