对比 Next.js

VPS (vite-plugin-ssr) 在三个基本方面与 Next.js 不同:

  1. VPS 与 UI 框架无关

    VPS 跟 React 毫不相关,其源码对 React 的依赖为零。实际上你可以将 VPS 与其他任何 UI 框架(Vue、Preact、Solid 等)一起使用

    使用 VPS,你可以实现完全控制 React 集成,这有很多好处。例如,你可以跟 Facebook 一样使用 Relay (render-as-you-fetch stream),这在 Next.js 中是不可能的

  2. VPS 与服务器和部署无关

    使用 VPS,你可以完全控制你的服务器,也可以使用任意的部署策略

  3. VPS 是成熟且最小的

    所有依赖项 都是与 Vite 共享的(例如 fast-glob),或完全/过渡性的依赖(例如 @brillout/json-serializer)。 在你的 Vite 应用中添加 VPS 并不会增加任何无意义的依赖

    我们相信 VPS 既能成为一个成熟的前端工具,又能避免不必要的麻烦,是一个不错的选择

除了这些结构上的差异,VPS 还引入了一些功能,如极快的 HMR(vite 提供支持),一流的 SPA 支持(特别是即将到来的新 VPS 设计),域名驱动文件结构,最先进的代码分割(Vite/Rollup 提供支持),自动部署同步,构建你自己的框架 等等

Turbopack 复制了 Vite 的一些极快的 DX 技术,但它仍处于起步阶段,需要一段时间才能使 Turbopack 投入生产。有了 Vite,你今天就可以使用快如闪电的 DX

最后,VPS 是一个社区项目:与其依靠一个与你的商业利益根本不一致的框架,不如使用一个由社区驱动的项目,该项目由社区赞助并为社区制作

与 UI 框架无关

有了 VPS,你就可以自己整合 React。这意味着你需要编写更多的模板,但作为交换,你可以得到更多的灵活性

因为你自己集成了 React,你就可以完全掌控你喜欢的前端集成工具(数据获取、状态管理、鉴权等)

Relay 是一个最先进的 GraphQL 客户端,由 Facebook(发明 GraphQL 的公司)开发并大规模使用。这个YouTube 视频 “重新介绍 Relay” 详细解释了 Relay 的好处

许多用户和赞助商利用 VPS 的灵活性,将 Relay 和 SSR streming 集成使用

除了 React,VPS 还包括你想要的所有前端框架。客户端路由、HMR、文件系统路由、预渲染、数据获取、代码分割、布局、i18n 等

与服务器/部署无关

要集成 VPS,你只需将 VPS 的中间件添加到你的服务器(Express.js、Fastify、Edge Worker、Serverless Function 等)

通过 VPS,你可以完全控制服务器和部署,这是你的架构中最关键的方面之一

手动集成

正如上所述,VPS 的理念是:手动集成工具,而不是被锁定在你的框架决定中。你可以使用任何你想要的工具

总而言之,VPS 不那么容易,但更简单。对于大规模的项目来说,简单比 "容易" 更 重要

手动集成是有趣且有见地的。(而与框架斗争是很讨厌的)

构建你自己的框架

VPS 的设计从头到尾都是为了使用户能够在 VPS 的基础上建立框架

虽然有许多 构建自己的框架的用例,但最典型的还是 构建公司内部框架

我们促进了 React 框架的扩散,为特定的使用案例高度定制了框架

用户反馈

来自 @Axxxx0n:

  1. 由 Vite 提供的极快的开发速度 (按需编译、原生 ESM)
  2. Next.js 必须有很多例子,并且存在大量的库只是为了将一些库与 Next.js 集成,因为对于 Next.js 而言这并不容易(例如 next-i18next)。使用 VPS,你只需阅读你想集成的库的文档即可
  3. 使用 getServerSideProps(),Next.js 会阻止客户端渲染
  4. Next.js 确实在推动 Vercel 平台的发展,并在最近的功能更新中开始显现。与此相一致的功能得到了优先考虑,而重要的修复则被推迟了
  5. Next.js 偏向于 Serverless,在你不需要此功能的时候会变得更加复杂

详细对照表

来自 @patryk-smc 和 @redbar0n:

VPSNext.js
UI 框架任意框架 (React、Preact、Solid 等)仅 React
代码分割打包支持支持
HMR支持,且快支持,但慢
SPA支持存在限制

SSR

Control完全的掌控能力限制的黑盒
渲染器支持,你需要多少就创建多少只有一个 (_app.ts 文件)
RSC (React Server Components)Work in progress支持,实验性

路由

文件系统路由支持支持
域名驱动文件路由支持不支持
客户端路由支持支持
服务端路由支持不支持
Base URL支持存在限制

集成

HTTP 服务不支持*,需要自己创建嵌入的、自定义的服务器部分支持,但有注意事项[1][2]
Apollo Client + SSR完全支持部分支持
Relay + SSR完全支持部分支持

额外

Head 组件不支持*, 可以使用如react-helmet的工具库支持,next/head
Image 组件不支持*,使用类似这些的 Vite 插件:请参考 awesome-vite支持,next/image
API routes不支持*, 使用你自己的服务器或 RPC 工具.支持
国际化 (i18n)支持存在限制
部署同步支持不支持
构建你自己的框架支持不支持

部署可选项

Vercel支持,最低配置支持,零配置
Cloudflare Workers支持,最低配置不支持,work in progress
Node server (Docker, Heroku, Digital Ocean 等)支持,最低配置支持,但存在限制

(*) VPS 在设计上并不提供这些额外的功能