Web 应用架构与工程生态选型
围绕 Next 一体应用与 React SPA 加独立服务比较契约、运行、能力组合和采用条件。
调研问题与条件
本调研回答:使用 TypeScript 建立 Web 应用时,如何在界面与服务一体部署、前后端独立部署之间选择,并把界面、数据、任务与外部集成组织成可维护组合。对象是个人和小团队需要理解并持续演进的应用;没有预设特定业务、强制全部引入工具或某种架构普遍获胜。
主要材料是仓库 2026-10-02 的 TS 全栈研究与手册,包括架构分稿、32 个能力方向、长尾与补遗、审校和抓取记录。2026-10-05 重组按实际对象归并,重新读取关键官方接口以修正保证和适配边界。本次没有为全部库复采版本、下载量、商业价格或执行完整候选应用,因此建议是按条件的案头选择,性能和维护成本没有本项目实测排序。
建议保留两条可解释的基线:页面与服务同一交付目标、服务只供自身界面且平台支持所需动态能力时,优先考察 Next 一体应用;接口需要多个独立消费者、服务需长期进程或独立扩容时,优先考察 React SPA 加独立服务。 特定后台任务即使由 Next 提交,也可以由独立 worker 消费,不必因任务引入就拆开所有界面服务。
两条线各怎样工作
一体线用 Next App Router 组织路由与服务器组件,用客户端组件承载交互,用 Server Actions 或 Route Handlers 提供效果入口。内部动作仍要验证输入、主体和对象,外部消费者需要稳定的运输契约。平台对服务器执行、缓存、长连接和 worker 的支持决定部署方式。
分离线用 Vite 构建 React SPA,浏览器通过 API 取得结果;Nest、其他 Node 框架或其他语言服务承担身份、规则与存储。OpenAPI 可以连接跨语言接口与生成客户端。两端分别交付,增加跨源、契约版本、环境和故障定位责任,也允许独立变化。
| 决定条件 | 一体线的作用与成本 | 分离线的作用与成本 |
|---|---|---|
| 页面内容与首屏 | 可组合服务端或构建期内容及客户端交互;需理解渲染与缓存边界 | 可静态交付 SPA;首屏数据、SEO 和预渲染需对应方案 |
| 消费者 | 自身界面可与内部动作紧密演进;公开 API 另需显式契约 | 多端、第三方和跨语言消费者可共享明确 API |
| 运行形态 | 接近框架部署接口,目标平台能力和限制直接影响采用 | API 与 worker 可长驻或按平台独立组织,运维组件增加 |
| 交付与恢复 | 一个应用减少部分版本协调;数据和外部效果仍独立 | 可独立扩缩与回滚,必须管理消费者兼容窗口 |
| 学习及维护 | 需掌握 RSC、客户端边界和框架缓存 | 需掌握 API 契约、网络边界、服务模块与分布交付 |
这些关系来自框架接口和部署形态的推理,未给出同负载速度或总工时结论。Vite 文档描述项目构建,Nest 文档描述模块与服务入口,Next 文档分别说明服务器客户端及静态导出边界。Vite、Nest、Next 组件边界、Next 静态导出
契约选择
OpenAPI 适合明确记录运输接口,并服务生成、审查与跨语言消费者。生成物仍需要与真实序列化和错误一致,类型生成也不验证真实响应。tRPC 等共享 TS 接口适合受控 TS 消费范围,Server Actions 与框架界面接近;二者仍需运行解析与授权。
GraphQL 适合客户端按图结构选择字段,增加 resolver、字段权限、查询复杂度和 N+1 等责任。REST、RPC 和 GraphQL 的采用由资源、操作、消费者和变更决定,不能把后出现的方式排列成淘汰链。
采用时如何收敛
先选择真实需求中的一条最小完整链,例如输入、校验、写入和读回。默认能力能满足时保持依赖少;出现新任务后再引入队列、复杂表格、协同或向量检索。表格、认证、消息和文档工具的能力选型按后续分册的同一条件表进行,无需一次安装整套库。
升级按运行时、模块格式、peer、原生扩展、schema、框架和生成工具核对。范围表达如 ^6.3 与 ~6.3 具有不同允许升级集合,不可把符号名称与政策写反。锁文件保存实际依赖,仍需核对外部服务和执行环境。
当前结论能支持架构和能力候选的选择顺序。实际采用还需目标版本的一条端到端链、失败与恢复、交付约束和所需真实浏览器验证;缺少这些证据时,不宣称生产已就绪。
能力候选与组合条件
工程组合、长尾候选与证据边界
最后更新于