前端 SSR 实践:Next.js 14 从零到上线

初始化与目录

1
2
3
npx create-next-app@latest my-app --ts --eslint --app --src-dir
cd my-app
npm run dev
  • app/ 目录:基于 App Router,支持 React Server Components。
  • app/(marketing)/app/(app)/ 可分营销与应用区分布局。

路由与数据获取

  • 服务器组件:默认 Server Component,减少前端 JS。
  • 客户端组件:交互强的组件用 "use client"
  • 数据获取fetch + revalidate 实现 SSG/ISR;或 cache: 'no-store' 纯 SSR。
  • 元数据/SEO:在 app/layout.tsx 或页面导出 metadata

样式与资源

  • 全局样式放 app/globals.css;组件级用 CSS Modules 或 Tailwind。
  • 图片优化:next/image,设置 sizes 与占位符,降低 LCP。
  • 字体:next/font 内置托管,避免 FOUT/FOIT。

API 与边缘

  • Route Handlersapp/api/.../route.ts 提供 API,可跑在 Edge Functions。
  • 中间件middleware.ts 做重定向/鉴权。
  • Cache 控制revalidate/force-cache/no-store 按页面需求设置。

性能与体验

  • Core Web Vitals:减少客户端 bundle,按需分块,延迟加载重脚本。
  • 预取:默认 Link 预取;大流量站可按需关闭/启用。
  • 分析:接入 Vercel Analytics 或自建 Web Vitals 上报。

部署

Docker 自托管

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:22-alpine
WORKDIR /app
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY package*.json ./
RUN npm ci --omit=dev
EXPOSE 3000
CMD ["npm","run","start"]

边缘/无服务器

  • Vercel 原生支持;Cloudflare Pages/Workers + Miniflare 也可(需适配中间件与 Edge Runtime)。
  • 环境变量通过托管平台面板设置,密钥不进仓库。

安全与配置

  • 环境变量区分前后缀:NEXT_PUBLIC_ 暴露到客户端,其余仅服务器可见。
  • CSP/Headers:在 next.config.js 自定义安全头;可启用 images.remotePatterns 控制外链。
  • Auth:可接入 NextAuth.js / Auth.js,或自建 JWT/Session。

总结

Next.js 14 让 SSR/SSG/ISR 与 React Server Components 融合。关注:数据获取策略、客户端与服务器组件分层、核心性能优化、部署渠道(Docker/边缘),即可稳定上线可扩展的前端应用。***