下面 HTML 片段是手写的「查看源代码」视图(已截断),用来把「首屏有没有正文」这件事看到眼里。
| 字段 | 做什么 | 什么时候用 | 部署产物差别 |
|---|---|---|---|
ssr: false | 这条路径关掉服务端渲染,只剩 JS 壳 | 登录后后台、内部工具 | 该路径产出 .html 空壳或走 SPA fallback |
prerender: true | 构建时就把 HTML 生成成文件 | 博客、文档、营销页 | 多了 /blog/hello/index.html,纯静态可放 CDN |
swr: 60 | 先回缓存的旧 HTML,后台再重新生成(stale-while-revalidate) | 高频内容页、首页 | 需要能跑的 Node(或 CDN 缓存层),产物带 /api/__skyline…缓存驱动 |
isr: { expiry: 3600 } | Vercel/Netlify 式增量静态再生:首次现算,之后按期过期 | 商品详情页、平台托管时 | 平台自己管缓存,本地 node .output/server 会退化成 swr 行为 |
cache: 'default' | 'force-static' | 更底层的 Nitro 缓存策略(routeRules 新写法) | 要精细控制缓存键时 | 同上,取决于 driver |
redirect: '/blog' | 301/302 跳转(配 statusCode) | 改版换路径、旧 SEO 链接 | 不需要 Node:静态托管也能生效(写在 _routes.json/nginx) |
proxy: 'https://x/**' | 把这条路径转发给别的后端 | 把老 PHP/Java 服务并到一个域名下 | 需要能跑 Node(或改成 nginx 层反代) |
headers / cors | 给响应加头(缓存头、CORS) | set-header、跨域接口 | 静态托管时 headers 靠 _headers 文件 |
顺序记三句:① nuxt build 出 Node 服务(.output/server/index.mjs),要跑进程;② nuxt generate 出纯静态目录,不要进程,但只能有预渲染过的路径;
③ 混合模式(nitro.prerender.crawlLinks + routeRules)产出「静态文件 + Node 服务」两份,由平台或 nginx 决定谁先接请求。