🚧 网站建设中,内容持续完善中 🚧
01MVP

网站开发技术选型

技术选型说明

待优化

  • 类似 supabase / appwrite 的这种服务其实非常的好!能极大降低开发成本,应该尽量使用他们
  • 微信云开发 | 腾讯云开发 | 阿里云小程序云 | LAF云 |

技术栈概览

  • Next.js: 功能全面的 React 框架,提供 SSR、SSG 及优秀开发体验。
  • Hono: 轻量级、高性能的 API 框架,选择它而非 Next.js API 路由是为了实现 API 与前端的解耦、独立部署及边缘环境优化。
  • Prisma: 类型安全且开发体验优秀的现代化数据库 ORM。
  • Tailwind CSS: 原子化 CSS 框架,极大提升 UI 开发效率和一致性。
  • shadcn/ui: 可定制、非封装的 UI 组件集合,基于 Radix UI 和 Tailwind CSS。
  • Bun: 高性能 JavaScript 运行时和一体化工具链。
  • Better Auth (Lucia): 灵活、类型安全、框架无关的认证库。
  • TanStack Query: 强大的异步状态管理库,简化服务端数据同步与缓存。
  • Fumadocs: 专为 Next.js App Router 设计的现代化文档构建工具。

本文档旨在阐述我们选择特定技术栈来开发网站的原因,重点介绍每个技术的核心优势以及为何不选择其他替代方案。

前端框架:Next.js

  • 选择原因: Next.js 是一个功能全面的 React 框架,提供了生产环境所需的大量开箱即用的功能,如服务端渲染 (SSR)、静态站点生成 (SSG)、增量静态再生 (ISR)、基于文件的路由、API 路由、图像优化等。
  • 核心优势:
    • 开发体验 (DX): 优秀的 HMR(热模块替换)、清晰的项目结构、完善的文档和庞大的社区支持。
    • 性能: 内建多种渲染策略和优化手段(代码分割、预取、图像优化),有助于构建高性能应用。
    • 全栈能力: 支持 API 路由,可以在同一个项目中处理前后端逻辑。
    • React 生态: 无缝集成 React 生态系统中的各种库和工具。
  • 替代方案及不选择原因:
    • Remix: 另一个优秀的全栈 React 框架,但在选择时,Next.js 的社区更大、生态系统更成熟,且与 Vercel 的集成更紧密。
    • Astro: 主要面向内容型网站,采用 MPA(多页应用)架构和 Islands Architecture,对于需要复杂客户端交互的 SPA(单页应用)场景,Next.js 更为合适。
    • Nuxt.js: Vue 生态的优秀框架,但我们团队的技术栈更侧重于 React。

API 框架:Hono

  • 选择原因: Hono 是一个轻量级、极速的 Web 框架,尤其擅长在边缘计算环境(如 Cloudflare Workers)运行,同时也兼容 Node.js、Bun、Deno 等多种运行时。
  • 核心优势:
    • 性能: 非常快,开销极小,适合构建高性能 API。
    • 轻量简洁: API 设计简单直观,易于上手。
    • 多运行时支持: "一次编写,随处运行",具有良好的可移植性。
    • 中间件: 支持丰富的中间件生态。
  • 替代方案及不选择原因:
    • Express: Node.js 生态的事实标准,但相对 Hono 更重,性能稍逊,且并非为边缘计算优先设计。
    • Fastify: 性能优秀,插件架构强大,但相比 Hono 更复杂一些,对于追求极致轻量的场景,Hono 更优。
    • ElysiaJS: 基于 Bun 构建,性能极佳,但相对较新,且与 Bun 绑定较深,Hono 的普适性更好。
    • Nextjs API: 轻量级 API,必须基于文件 Route,Honojs 灵活性比它更高,功能更全面。

ORM: Prisma

  • 选择原因: Prisma 是一个现代化的 Node.js 和 TypeScript ORM,提供了卓越的类型安全和开发体验。
  • 核心优势:
    • 类型安全: Prisma Client 是完全类型安全的,能在编译阶段捕获数据库相关的错误。
    • 开发体验: 自动生成 Client、强大的自动补全、易用的 Migration 系统 (prisma migrate)。
    • Prisma Studio: 内建的 GUI 工具,方便查看和操作数据库。
    • 查询引擎: 高性能的查询引擎。
  • 替代方案及不选择原因:
    • Drizzle ORM: 非常轻量、性能优异、更贴近 SQL,尤其在边缘计算环境表现出色。但在选择时,Prisma 的整体开发体验(特别是自动补全、Migration 工具链、Studio)更胜一筹。虽然 Prisma 在 Edge 上的支持曾是短板,但正在快速改进。
    • TypeORM: 功能强大,但配置相对复杂,装饰器语法可能不适合所有团队。
    • Sequelize: 历史悠久,功能稳定,但 API 相对老旧,类型支持不如 Prisma。

CSS 方案: Tailwind CSS

  • 选择原因: Tailwind CSS 是一个 Utility-First(原子化)的 CSS 框架,极大地提高了 UI 开发效率和可维护性。
  • 核心优势:
    • 开发效率: 直接在 HTML 中通过组合原子类快速构建界面,无需频繁切换文件和命名。
    • 可定制性: 高度可配置,易于实现自定义的设计系统。
    • 约束性: 提供了统一的设计约束(颜色、间距、字体等),易于保持 UI 一致性。
    • 性能: 通过 PurgeCSS(或内置 JIT 引擎)移除未使用的 CSS,最终构建体积小。
    • 无运行时开销: 与 CSS-in-JS 不同,它生成静态 CSS 文件。
  • 替代方案及不选择原因:
    • Bootstrap: 基于组件的框架,定制性不如 Tailwind 灵活。
    • Material UI / Ant Design: 组件库,带有较强的设计风格,定制样式相对麻烦,不如 Tailwind 自由。
    • CSS Modules / Scoped CSS: 提供了样式隔离,但开发效率不如原子化 CSS。
    • Styled Components / Emotion: CSS-in-JS 方案,提供了组件级的样式封装和动态样式,但可能引入运行时开销,且不如 Tailwind 直观。

UI 组件: shadcn/ui

  • 选择原因: shadcn/ui 不是一个传统的组件库,而是一系列基于 Radix UI 和 Tailwind CSS 构建的可复用、可定制的 UI 组件。
  • 核心优势:
    • 非封装库: 直接将代码复制到项目中,完全掌控组件的样式和行为,易于定制。
    • 基于 Radix UI: 底层使用 Radix UI,保证了组件的可访问性 (a11y) 和功能健壮性。
    • Tailwind CSS 优先: 与 Tailwind CSS 完美集成,样式调整非常方便。
    • 按需使用: 只复制代码需要的组件,不会引入无用代码。
  • 替代方案及不选择原因:
    • Material UI / Chakra UI / Ant Design: 传统组件库,虽然开箱即用,但定制底层样式和行为比较困难,且打包体积较大。shadcn/ui 提供了更高的灵活性和控制力。

JavaScript 运行时 & 工具链: Bun

  • 选择原因: Bun 是一个现代化的、极速的 JavaScript "瑞士军刀",集成了运行时、打包器、转译器、任务运行器和 npm 兼容的包管理器。
  • 核心优势:
    • 性能: 启动速度快,运行性能高。
    • 一体化工具链: 内置了常用开发工具,简化了项目配置和依赖。
    • 兼容性: 目标是与 Node.js API 高度兼容,迁移成本相对较低。
    • 原生支持: 开箱即用地支持 TypeScript 和 JSX。
  • 替代方案及不选择原因:
    • Node.js: 成熟稳定,生态庞大,是当前标准。但 Bun 在性能和集成工具方面展现了巨大潜力。选择 Bun 是为了探索更高的性能和更简洁的开发流程。
    • Deno: 另一个现代运行时,强调安全性和不同的 API 设计。Bun 更注重与 Node.js 的兼容性,生态迁移可能更平滑。

认证库: Better Auth (以 Lucia Auth 为例)

  • 选择原因: Lucia Auth 是一个现代、灵活、类型安全的认证库,不绑定特定框架。(此处假设 "Better Auth" 指的是类似 Lucia 这样现代、灵活的库)
  • 核心优势:
    • 灵活性与控制力: 提供了构建认证逻辑的基础模块,开发者可以完全控制用户会话、数据库交互等。
    • 类型安全: 提供良好的 TypeScript 支持。
    • 框架无关: 可以与 Next.js, Hono, SvelteKit 等多种框架集成。
    • 适配器: 支持 Prisma、Drizzle 等多种数据库/ORM 适配器。
    • 功能全面: 支持 Session 管理、OAuth、密码重置等常用功能。
  • 替代方案及不选择原因:
    • NextAuth.js (Auth.js): 非常流行,与 Next.js 集成紧密,但有时配置可能较为复杂,且灵活性相比 Lucia 稍差。
    • Clerk / Supabase Auth: 提供后端服务的认证方案 (Auth as a Service),虽然方便,但会引入外部依赖,且控制力不如自托管库。选择 Lucia 是为了获得更高的控制力和定制性。

数据请求与状态管理: TanStack Query (React Query)

  • 选择原因: TanStack Query (前身为 React Query) 是一个强大的异步状态管理库,专门用于处理服务端状态(如数据获取、缓存、同步)。
  • 核心优势:
    • 简化数据获取: 极大地简化了数据获取、缓存、同步和更新的逻辑。
    • 缓存与后台更新: 自动处理缓存,支持 stale-while-revalidate、后台自动刷新等策略,提升 UX。
    • 状态管理: 有效管理加载状态、错误状态。
    • DevTools: 提供强大的开发者工具,方便调试。
    • 乐观更新: 支持乐观更新,提升交互体验。
  • 替代方案及不选择原因:
    • SWR: Vercel 出品的类似库,API 更简洁,功能也很强大。选择 TanStack Query 是因为它提供了更丰富的配置选项和功能(如 Mutations 的状态管理)。
    • Redux / Zustand + 手动 Fetch: 需要编写大量重复的样板代码来处理异步逻辑、缓存、加载状态等,TanStack Query 极大地减少了这些工作。
    • Apollo Client: 主要用于 GraphQL,虽然也能处理 REST API,但 TanStack Query 更通用,对于 REST API 更轻量。

文档工具: Fumadocs

  • 选择原因: Fumadocs 是一个专为 Next.js App Router 设计的现代文档构建工具。
  • 核心优势:
    • Next.js 集成: 与 Next.js App Router 无缝集成,利用其最新特性。
    • MDX 支持: 支持 MDX v3,可以在 Markdown 中使用 React 组件。
    • 现代化 UI: 提供美观、可定制的 UI 组件。
    • 性能: 基于 Next.js 构建,性能良好。
    • 专注文档: 提供了搜索、目录、导航等文档网站常用功能。
  • 替代方案及不选择原因:
    • Docusaurus: 功能非常全面的静态站点生成器,但并非专为 Next.js App Router 设计。
    • Nextra: 另一个基于 Next.js 的文档工具,也很优秀,但 Fumadocs 在 UI 和 App Router 集成方面更新、更专注。
    • VitePress: 基于 Vite 和 Vue,适用于 Vue 生态。

选择这些技术是为了结合性能、开发效率、类型安全和现代化的开发体验。虽然存在其他优秀的替代方案,但当前的技术栈被认为是满足我们项目需求的最佳组合。

On this page