SuperAPI AI 工具集

angular-ssr

前端与建站

查看项目

更新于 10-16 04:04

技能介绍

用途

本资料用于在 Angular v20+ 项目中实现服务端渲染(SSR)、混合(hydration / 水合)与预渲染(prerendering),核心依赖为 @angular/ssr 包。

安装与项目结构

向现有项目添加 SSR 使用命令:

ng add @angular/ssr

该命令会添加 @angular/ssr 包、server.ts(Express 服务器)、src/main.server.ts(服务端引导)、src/app/app.config.server.ts(服务端 providers),并更新 angular.json 的 SSR 配置。

生成的项目结构大致为:

src/
├── app/
│   ├── app.config.ts          # Browser config
│   ├── app.config.server.ts   # Server config
│   └── app.routes.ts
├── main.ts                     # Browser bootstrap
├── main.server.ts              # Server bootstrap
server.ts                       # Express server

服务端配置

app.config.server.ts 使用 provideServerRendering() 与 provideServerRoutesConfig(serverRoutes),并通过 mergeApplicationConfig 合并浏览器与服务端配置。

路由级渲染模式在 app.routes.server.ts 中通过 ServerRoute 数组定义,使用 RenderMode 指定:

  • RenderMode.Prerender:构建时生成静态 HTML,适用于营销页面、博客。
  • RenderMode.Server:按请求动态 SSR,适用于用户相关内容。
  • RenderMode.Client:仅客户端渲染(SPA),适用于需登录的仪表盘。

混合(Hydration)

默认混合通过 provideClientHydration() 启用。增量混合使用 @defer (hydrate ...) 延迟特定组件的混合,支持的触发条件包括:hydrate on viewport(元素进入视口时)、hydrate on interaction(点击、聚焦或输入时)、hydrate on idle(浏览器空闲时)、hydrate on immediate(加载后立即)、hydrate on timer(ms)(延迟指定毫秒后)、hydrate when condition(表达式为真时)、hydrate never(永不混合,保持静态)。

事件重放通过 provideClientHydration(withEventReplay()) 捕获混合完成前的用户事件。

仅浏览器代码

通过注入 PLATFORM_ID 并配合 isPlatformBrowser / isPlatformServer 判断运行平台;也可使用 afterNextRender(首次渲染后运行一次)与 afterRender(每次渲染后运行),二者仅在浏览器中执行。浏览器 API 可通过 InjectionToken(如 WINDOW、LOCAL_STORAGE)在工厂函数中按平台判断后安全注入。

预渲染

静态路由直接设置 renderMode: RenderMode.Prerender。动态路由可通过 getPrerenderParams 异步获取参数列表进行预渲染,并使用 fallback 指定未预渲染路由的处理方式:

  • PrerenderFallback.Server:对这些路由做 SSR。
  • PrerenderFallback.Client:客户端渲染。
  • PrerenderFallback.None:返回 404。

HTTP 缓存

TransferState 可将 HTTP 响应从服务端传递到客户端。可通过 provideClientHydration(withHttpTransferCacheOptions({...})) 配置,选项包括 includePostRequests、includeRequestsWithAuthHeaders 与 filter;也可手动使用 TransferState 与 makeStateKey 实现。

构建与部署

构建命令为 ng build,产物结构包含 browser/(客户端资源)与 server/(服务端 bundle)。运行 SSR 服务器:开发环境使用 npm run serve:ssr:my-app,生产环境使用 node dist/my-app/server/server.mjs。资料给出基于 Express 与 CommonEngine 的 Node.js 部署示例,监听 4000 端口。

限制

资料未提供关于具体版本兼容细节、性能基准、收费或平台支持的额外信息;更多高级模式需参见 references/ssr-patterns.md(资料中提及但未展开)。