本文档概述了服务器端集成包,这些包使 React Router 能够在各种托管平台和服务器环境中运行。这些特定于平台的适配器建立在核心 React Router 包之上,可在不同环境中提供无缝的服务器端渲染 (SSR) 功能。
有关服务器端渲染概念的信息,请参阅 服务器端渲染。有关特定数据加载策略的信息,请参阅 数据水合与加载。
React Router 中的平台适配遵循分层架构模式,其中专用包建立在更通用的包之上,以提供特定于平台的 Pinyin。
来源:packages/react-router-node/package.json1-105 packages/react-router-express/package.json1-85 packages/react-router-cloudflare/package.json1-75 packages/react-router-architect/package.json1-88 packages/react-router-serve/package.json1-70
平台适配遵循分层结构
来源:packages/react-router-node/package.json3-4 packages/react-router-express/package.json3-4 packages/react-router-cloudflare/package.json3-4 packages/react-router-architect/package.json3-4 packages/react-router-serve/package.json3-4
@react-router/node)Node.js 适配器为 Node.js 环境中的 React Router 提供了基础的服务器端抽象。它是其他基于 Node.js 的适配器的基础。
主要功能
依赖项
@mjackson/node-fetch-server:HTTP 请求处理source-map-support:Source map 支持,以便更好地报告错误undici:用于发起请求的 HTTP 客户端要求
来源:packages/react-router-node/package.json1-105
@react-router/express)Express 适配器提供了与 Express.js Web 服务器应用程序的集成。
主要功能
依赖项
@react-router/node:Node.js 平台抽象使用模式:Express 适配器通常用作 Express 应用程序中的中间件。
来源:packages/react-router-express/package.json1-85
@react-router/cloudflare)Cloudflare 适配器使 React Router 应用程序能够在 Cloudflare Workers 上运行。
主要功能
要求
@cloudflare/workers-types 用于 TypeScript 支持来源:packages/react-router-cloudflare/package.json1-75
@react-router/architect)Architect 适配器提供了与 AWS Architect 无服务器框架的集成。
主要功能
依赖项
@architect/functions:Architect 无服务器函数@types/aws-lambda:AWS Lambda 的类型定义@react-router/node:Node.js 平台抽象来源:packages/react-router-architect/package.json1-88
@react-router/serve)Serve 包为 React Router 应用程序提供生产级服务器。
主要功能
依赖项
@react-router/express:Express 服务器处理程序@react-router/node:Node.js 平台抽象compression:响应压缩express:Web 服务器框架morgan:HTTP 请求日志记录器CLI 用法:该包包含一个用于启动生产服务器的 CLI 工具。
来源:packages/react-router-serve/package.json1-70
平台适配与 React Router 的开发工具配合使用,可提供全面的开发体验。
来源:packages/react-router-dev/package.json1-149 packages/create-react-router/package.json1-76
每个平台适配可能需要特定的配置才能在其环境中正常运行。下表显示了每个平台的关键配置选项
| 平台 | 配置文件 | 关键设置 |
|---|---|---|
| Node.js | react-router.config.ts | ssr, dataStrategy |
| Express | Express 应用配置 | 中间件配置、静态文件路径 |
| Cloudflare | wrangler.toml | Workers 配置、环境变量 |
| Architect | .arc 文件 | Lambda 函数定义、API Gateway 路由 |
| 服务 | 命令行参数 | 端口、公共目录、环境 |
来源:packages/react-router-dev/package.json15-32
下图说明了服务器端渲染期间请求如何通过平台适配器流转
来源:packages/react-router-node/package.json71-75 packages/react-router-express/package.json51-53 packages/react-router-cloudflare/package.json47-52
平台适配遵循通用实现模式,以在不同环境中提供一致的行为
请求/响应抽象:每个平台适配都为平台的请求/响应对象提供了抽象。
环境检测:适配器会检测其所处的环境并据此进行配置。
错误处理:所有适配器都使用一致的错误处理模式。
流管理:在适用情况下,提供对流式响应的支持。
会话管理:在相关情况下,提供会话管理功能。
来源: packages/react-router-node/package.json71-75 packages/react-router-cloudflare/package.json47-52
所有平台适配器都需要 Node.js 20.0.0 或更高版本,特定环境除外。
此外,所有适配器都与 react-router 存在对等依赖,部分还具有可选的 TypeScript 依赖。
来源: packages/react-router-node/package.json93-95 packages/react-router-express/package.json75-77 packages/react-router-cloudflare/package.json65-67 packages/react-router-architect/package.json78-80 packages/react-router-serve/package.json59-61