Next.js 15全栈能力深度解析:从React Server Components到Tauri 2.0的现代Web与跨端开发全景指南
引言:全栈时代的范式转移
在2024年的技术生态中,Web开发正在经历一场深刻的范式转移。Next.js 15全栈能力的成熟标志着前端框架不再仅仅是”视图层”的解决方案,而是演进为能够处理数据库交互、API设计、身份验证、甚至跨平台部署的完整生态系统。这种转变并非偶然,而是开发者对于简化技术栈、提升开发效率的持续追求。
当我们审视当前的技术格局时,会发现几个关键趋势正在重塑开发体验。首先,React Server Components(RSC)的引入彻底改变了数据在应用中的流动方式,将服务端渲染性能提升到了前所未有的高度。其次,Vite 6和Nuxt 4等构建工具和元框架的进化,正在重新定义”快速开发”的标准。最后,Tauri 2.0的崛起为那些寻求Electron替代方案的开发者提供了轻量级且高性能的选择。
本文将深入探讨Next.js 15如何整合这些技术趋势,构建一个真正意义上的全栈开发平台。我们将从RSC数据流的底层原理出发,分析其如何优化服务端渲染性能;探讨在Monorepo工具链中管理复杂项目的最佳实践;对比Vue生态的最新进展,特别是Vue 3.6响应式优化和Pinia状态管理;并最终展望Tauri 2.0跨平台能力如何与Next.js的全栈架构产生化学反应,实现Rust后端前端融合的愿景。
这不仅仅是一篇技术综述,更是一份面向未来的开发指南。无论你是正在评估技术栈的架构师,还是渴望掌握最新工具的资深开发者,本文都将为你提供清晰的路线图,帮助你理解这些技术如何协同工作,以及如何在实际项目中发挥最大价值。
第一章:Next.js 15的核心全栈架构解析
1.1 React Server Components的深度集成
React Server Components不仅仅是一个新特性,它是Next.js 15全栈能力的基石。在传统的React应用中,组件必须在客户端渲染,这意味着即使是最简单的静态内容也需要经过JavaScript的解析和执行。而RSC引入了一种全新的组件类型——服务器组件,它们完全在服务端执行,可以直接访问后端资源,如数据库、文件系统或缓存。
在Next.js 15中,RSC的实现达到了新的高度。默认情况下,所有组件都是服务器组件,这意味着你可以直接在组件文件中编写数据库查询代码,而无需担心bundle大小或客户端性能问题。例如:
// 这是一个服务器组件 - 完全在服务端运行
import { db } from '@/lib/db';
export default async function UserProfile({ userId }) { // 直接访问数据库,无需API路由 const user = await db.user.findUnique({ where: { id: userId } });
return (
<div>
<h1>{user.name}</h1>
<p>{user.bio}</p>
</div>
);
}
这种模式的优势是显而易见的。首先,它极大地简化了代码结构,消除了传统前后端分离架构中的DTO(数据传输对象)转换。其次,它为服务端渲染性能带来了质的飞跃,因为数据获取和渲染都在服务端完成,客户端接收到的是完全静态的HTML。
更令人兴奋的是Next.js 15中RSC数据流的优化。通过Streaming(流式传输)技术,服务器可以分块向客户端发送数据。这意味着即使是复杂的页面,用户也能立即看到首屏内容,而无需等待所有数据加载完成。这种机制与Suspense的结合,使得部分UI的加载状态管理变得异常优雅。
1.2 服务端渲染性能的极致优化
Next.js 15在服务端渲染性能方面进行了多项革命性改进。其中最核心的是智能缓存策略和增量静态再生(ISR)的增强版本。
传统的SSR面临着一个核心矛盾:每次请求都需要重新生成页面,这给服务端带来了巨大的计算压力。Next.js 15通过引入”动态缓存”概念解决了这个问题。开发者可以精确控制每个数据片段的缓存粒度:
export const revalidate = 3600; // 每小时重新验证
export const dynamic = ‘force-dynamic’; // 强制动态渲染
// 或者更细粒度的控制
export async function GET(request) {
const data = await fetch('https://api.example.com/data', {
next: { revalidate: 60 } // 60秒缓存
});
return Response.json(await data.json());
}
这种缓存策略与RSC数据流的结合,创造了一种”混合渲染”的新范式。页面中不同的部分可以有不同的缓存策略:静态内容可以永久缓存,频繁变动的用户数据可以设置短时间缓存,而个性化内容则可以完全动态。
在基准测试中,Next.js 15的TTFB(首字节时间)相比上一代提升了约35%。这主要归功于:
- 预热机制:服务端会在低峰期预渲染热门页面
- 智能预取:Link组件会自动预取视口内链接的RSC数据
- 并行化:数据获取和渲染管道完全并行化
1.3 API Routes与Edge Runtime的融合
Next.js 15的全栈能力还体现在其API路由的进化上。传统的API路由需要手动处理请求、验证、错误处理等。而新的TypeScript严格模式支持让API开发变得更加类型安全。
更重要的是,Next.js 15将API路由与Edge Runtime深度融合。这意味着你的API可以部署在边缘节点,获得极低的延迟。这种边缘计算能力与Vercel的全球网络结合,使得原本需要复杂基础设施的全球应用变得触手可及。
传统API路由
- 运行在Node.js环境
- 冷启动时间较长
- 依赖服务器状态
- 扩展需要手动配置
Edge API Routes
- 运行在V8隔离环境
- 近乎零冷启动
- 无状态,易于扩展
- 全球边缘网络部署
这种架构演进使得Next.js不仅仅是一个前端框架,而是一个真正的全栈平台。开发者可以在同一个项目中编写服务器组件、API路由、数据库操作,甚至Monorepo工具链配置,而无需在不同技术栈之间切换。
第二章:现代前端生态的协同进化
2.1 Monorepo工具链的最佳实践
随着应用复杂度的提升,Monorepo工具链已成为大型项目的标配。Next.js 15与Turborepo的深度集成,为开发者提供了开箱即用的Monorepo解决方案。
在传统的多仓库架构中,共享组件的管理是一个噩梦。版本冲突、依赖不同步、发布流程复杂等问题层出不穷。Monorepo通过将所有代码放在同一个仓库中,配合智能的构建工具,从根本上解决了这些问题。
Next.js 15推荐的Monorepo架构包含以下核心要素:
- 包管理器选择:pnpm因其高效的磁盘空间利用和快速安装成为首选。它通过硬链接避免了重复安装,这在Monorepo中尤为重要。
- 构建工具:Turborepo提供了增量构建和远程缓存。当你在团队中协作时,一个人的构建结果可以被其他人复用,极大提升了CI/CD效率。
- 任务编排:通过turbo.json精确控制构建依赖关系。例如,只有当UI包构建完成后,才会构建依赖它的Web应用。
// turbo.json
{
"pipeline": {
"build": {
"dependsOn": ["^build"],
"outputs": [".next/**", "dist/**"]
},
"dev": {
"cache": false
}
}
}
在实际项目中,一个典型的Monorepo结构可能如下所示:
apps/web/– Next.js 15主应用apps/docs/– 文档站点(可能使用其他框架如Nuxt 4)packages/ui/– 共享组件库packages/utils/– 工具函数packages/db/– 数据库schema和客户端packages/config/– 共享配置(ESLint, TypeScript等)
这种结构的优势在于,每个包都可以独立开发、测试和发布,但又保持了代码的统一性和一致性。特别是在Next.js 15中,你可以配置模块别名,让导入变得像本地导入一样简单:
// next.config.js
const path = require('path');
module.exports = { webpack: (config) => { config.resolve.alias[‘@ui’] = path.join(__dirname, ‘../packages/ui’); return config; } };
// 在组件中使用
import { Button } from '@ui/Button';
2.2 Vue生态的对比视角:Vite 6与Nuxt 4
虽然本文聚焦于Next.js,但了解竞争对手的技术路线对于全面理解现代前端生态至关重要。Vite 6和Nuxt 4代表了Vue生态的最新进展,它们在某些方面提供了与Next.js不同的解决方案。
Vite 6的构建速度已经达到了令人惊叹的程度。通过完全依赖ESM和原生ES模块,Vite绕过了传统打包器的瓶颈。在大型项目中,Vite 6的冷启动时间可能只有Webpack的1/10。这种速度优势对于开发者体验是革命性的。
然而,Next.js 15在构建速度上也并未停滞不前。通过与Turbopack的深度集成(Rust编写的增量打包器),Next.js的开发服务器启动速度提升了数倍。虽然Vite在纯构建速度上仍有优势,但Next.js的全栈能力弥补了这一差距。
Nuxt 4则在一体化开发方面做出了有趣的探索。它提供了类似Next.js的文件路由系统,但更加注重Vue的响应式特性。Nuxt的模块系统非常强大,社区模块可以无缝集成,从Pinia状态管理到Tailwind CSS配置,都可以通过简单的配置完成。
在服务端渲染性能方面,Nuxt 4采用了与Next.js类似的理念,但实现细节不同。Nuxt更强调”智能预取”,它会根据组件的可见性和重要性来决定数据加载的优先级。而Next.js的RSC数据流则更强调服务端到客户端的数据管道化传输。
对于开发者来说,选择Next.js还是Nuxt往往取决于团队的技术栈偏好。如果你的团队已经熟悉React和TypeScript,Next.js 15的全栈能力将是最佳选择。如果你更倾向于Vue的渐进式特性和更直观的API,Nuxt 4同样是一个强大的框架。
2.3 状态管理的演进:从Redux到Pinia
状态管理一直是前端开发的核心议题。在React生态中,虽然Redux仍然占据重要地位,但Zustand、Jotai等更轻量的库正在崛起。而在Vue生态中,Pinia状态管理已经成为官方推荐的标准。
Pinia的设计哲学与Next.js的理念有异曲同工之妙:简洁、类型安全、易于测试。Pinia的Store定义非常直观:
// Vue的Pinia示例(供对比理解)
import { defineStore } from 'pinia';
export const useUserStore = defineStore('user', {
state: () => ({ name: '', age: 0 }),
actions: {
async fetchUser() {
const res = await fetch('/api/user');
this.name = (await res.json()).name;
}
}
});
在Next.js 15中,状态管理的格局也在发生变化。由于React Server Components的存在,很多原本需要客户端状态管理的数据现在可以直接在服务端处理。但这并不意味着客户端状态管理变得不重要——相反,它变得更加专注于用户交互和临时状态。
Next.js 15推荐的模式是:服务端状态通过RSC管理,客户端状态通过Context或轻量库管理,两者通过Suspense边界进行协调。这种混合模式既保持了代码的简洁性,又确保了类型安全和开发效率。
服务端状态 (RSC)
数据库查询、API调用、静态数据
自动缓存、流式传输
客户端状态
表单数据、UI状态、用户交互
Context API、Zustand等
全局状态
用户认证、主题偏好
Cookies、LocalStorage
这种分层状态管理策略,配合TypeScript严格模式,使得大型Next.js应用的维护性达到了新的高度。类型错误在编译期就能被捕获,状态变化的追踪也变得更加直观。
第三章:跨平台革命与Rust的融合
3.1 Tauri 2.0:下一代桌面应用框架
当我们谈论Next.js的全栈能力时,不能不提到它在跨平台领域的扩展。Tauri 2.0的出现为Web技术开发桌面应用带来了全新的可能性,它被视为Electron替代方案的首选。
Electron虽然统治桌面应用开发多年,但其最大的痛点是体积庞大。一个最简单的Electron应用也需要打包Chromium和Node.js,导致安装包轻松超过100MB。而Tauri 2.0通过使用系统原生的WebView,将安装包体积优化到了惊人的程度——通常只有几MB。
Tauri 2.0的核心优势包括:
- 安装包体积优化:利用系统WebView,无需打包浏览器引擎
- 性能提升:更少的内存占用,更快的启动速度
- 安全性增强:严格的权限控制,沙箱隔离
- 跨平台一致性:Windows、macOS、Linux统一API
3.2 Rust后端前端融合的实践
Tauri 2.0跨平台能力的精髓在于Rust后端前端融合。Tauri的核心是用Rust编写的,这为前端应用提供了强大的后端能力。
在一个典型的Tauri + Next.js架构中,你可以这样组织代码:
// src-tauri/src/main.rs
#[tauri::command]
async fn fetch_database(query: String) -> Result<Vec, String> {
// Rust实现的数据库查询,性能极高
let users = sqlx::query_as(&query)
.fetch_all(&pool)
.await?;
Ok(users)
}
// Next.js前端调用
async function getUsers() {
const { invoke } = await import('@tauri-apps/api/tauri');
return await invoke('fetch_database', { query: 'SELECT * FROM users' });
}
这种架构的优势是显而易见的。你可以用Next.js快速构建UI,同时用Rust处理性能敏感的操作,如文件系统访问、加密、图像处理等。Rust的所有权模型和零成本抽象保证了内存安全和运行效率,而Next.js的组件化开发模式保证了UI的开发效率。
更令人兴奋的是,Tauri 2.0支持系统原生API调用。这意味着你可以直接访问操作系统的功能,如通知、菜单栏、系统托盘等,而这些在Electron中往往需要复杂的配置。
3.3 与Next.js的无缝集成
将Next.js应用打包为Tauri桌面应用的过程在Tauri 2.0中变得异常简单。通过Monorepo工具链,你可以将Next.js项目和Tauri项目放在同一个仓库中,共享组件和类型定义。
一个典型的集成流程如下:
- 开发阶段:在Next.js中开发UI,使用
npm run dev启动开发服务器 - 构建阶段:运行
npm run build生成静态文件 - 打包阶段:Tauri读取Next.js的构建输出,封装为原生应用
- 发布阶段:生成对应平台的安装包(.exe, .dmg, .deb等)
这种工作流程的优势在于,你不需要学习新的UI开发范式。团队中原本开发Web应用的开发者可以无缝过渡到桌面应用开发,而无需重写大量代码。
在安装包体积优化方面,Tauri 2.0提供了精细的控制选项。你可以选择打包哪些资源,压缩级别,甚至动态加载模块。一个包含复杂UI的Next.js应用,经过优化后,安装包可以控制在5MB以内,这在Electron时代是不可想象的。
// tauri.conf.json
{
"bundle": {
"active": true,
"targets": "all",
"identifier": "com.example.app",
"resources": ["dist/**/*"],
"minimumSystemVersion": "10.13"
},
"security": {
"csp": "default-src 'self'; script-src 'unsafe-inline'"
}
}
这种配置的灵活性使得Tauri 2.0能够适应各种应用场景,从简单的工具类应用到复杂的商业软件,都能找到合适的打包策略。
第四章:构建生产级全栈应用的完整流程
4.1 项目初始化与架构设计
在掌握了Next.js 15的全栈能力后,我们需要一个清晰的路线图来构建生产级应用。一个成功的项目始于正确的架构设计。
首先,选择合适的Monorepo结构。对于中型项目,我推荐以下布局:
- apps/web: Next.js 15主应用,包含所有页面和API路由
- apps/desktop: Tauri 2.0包装器(如果需要桌面版本)
- packages/core: 业务逻辑核心,与UI框架无关
- packages/ui: 共享UI组件库
- packages/db: 数据库schema和迁移文件
- packages/config: 共享配置(ESLint, Prettier, TypeScript)
在初始化阶段,务必启用TypeScript严格模式。虽然这会增加初期的开发成本,但它能在编译期捕获绝大多数类型错误,从长远来看极大提升了代码质量。
// tsconfig.json
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"noImplicitThis": true,
"alwaysStrict": true,
"esModuleInterop": true,
"skipLibCheck": true
}
}
4.2 数据层设计与RSC集成
数据层是全栈应用的核心。在Next.js 15中,我们需要充分利用RSC数据流的优势。
推荐使用Drizzle ORM或Prisma作为数据库客户端。它们都提供了优秀的TypeScript支持,与Next.js 15的TypeScript严格模式完美契合。以下是一个典型的RSC数据获取模式:
// app/products/page.tsx
import { db } from '@/packages/db';
import { ProductList } from './components';
export default async function ProductsPage() { // 这个查询在服务端执行,不会进入bundle const products = await db.query.products.findMany({ with: { category: true }, orderBy: (products, { desc }) => [desc(products.createdAt)] });
return (
<div>
<h1>我们的产品</h1>
{/* ProductList可以是客户端组件,接收预加载的数据 */}
<ProductList products={products} />
</div>
);
}
这种模式的优势在于:
- 数据获取完全在服务端,避免暴露数据库连接信息
- 客户端组件保持轻量,只负责UI交互
- 自动代码分割,每个页面只加载必要的JS
- SEO友好,初始HTML包含完整内容
4.3 部署与性能监控
Next.js 15的全栈能力在部署阶段同样表现出色。Vercel提供了最佳的部署体验,但Next.js也支持自托管和边缘部署。
对于需要服务端渲染性能极致优化的场景,Edge Runtime是首选。它可以将你的API和页面部署到全球各地的边缘节点,用户访问时自动连接到最近的节点。
性能监控方面,Next.js 15内置了Web Vitals指标收集。你可以将这些指标发送到你的分析服务,持续监控应用性能:
// next.config.js
module.exports = {
experimental: {
webVitalsAttribution: ['CLS', 'LCP']
},
async headers() {
return [
{
source: '/(.*)',
headers: [
{
key: 'Server-Timing',
value: 'cache;desc=Hit, db;dur=50'
}
]
}
];
}
}
结合Tauri 2.0的桌面应用部署,你可以构建一个真正的多平台产品:Web应用覆盖所有设备,桌面应用提供原生体验,两者共享同一个代码库和后端逻辑。
第五章:技术选型与未来展望
5.1 何时选择Next.js 15全栈方案
Next.js 15的全栈能力虽然强大,但并非所有场景都适用。以下是一些明确的采用信号:
- 需要SEO优化:内容型网站、电商页面等依赖搜索引擎流量的项目
- 团队熟悉React:已有React经验的团队可以快速上手
- 复杂的数据交互:需要频繁与后端通信的应用,RSC能极大简化代码
- 多平台需求:同时需要Web和桌面版本的产品
- 追求开发效率:希望减少上下文切换,一个框架解决前后端问题
相比之下,如果项目是纯SPA(单页应用),或者对首屏加载速度要求不敏感,传统的Vite + React方案可能更简单直接。
5.2 与Vue生态的对比决策
在选择技术栈时,Vue 3.6响应式优化和Pinia状态管理提供了与React生态不同的开发体验。
Vue的优势在于:
- 渐进式框架,学习曲线平缓
- 模板语法直观,适合设计师协作
- 响应式系统优雅,无需手动优化
- Nuxt 4一体化开发体验流畅
React(Next.js)的优势在于:
- 庞大的生态系统和社区支持
- 函数式编程范式,与TypeScript结合更好
- React Server Components带来的架构创新
- 更广泛的就业市场和人才储备
对于初创公司或小型团队,Vue可能更快上手。对于大型企业或需要长期维护的项目,Next.js的类型安全和架构优势更加明显。
5.3 跨端开发的未来
Tauri 2.0跨平台代表了Web技术向原生应用渗透的趋势。随着WebAssembly和WebGPU的发展,浏览器的能力越来越接近原生系统。未来,我们可能会看到更多类似Tauri的框架出现,它们将Rust的安全性和性能与Web的开发效率结合。
Next.js作为React生态的旗舰框架,很可能会进一步整合这些能力。我们可以期待:
- 更深度的Rust集成:Next.js可能内置Rust工具链,让开发者更容易编写高性能扩展
- 边缘计算标准化:Edge Runtime可能成为行业标准,其他框架也会跟进
- AI辅助开发:Next.js可能集成AI工具,自动生成组件和API路由
- Web组件互操作:更好地支持Web Components,与框架无关
在这种趋势下,掌握Next.js 15的全栈能力不仅是应对当前项目的需求,更是为未来的技术演进做好准备。
结论:拥抱全栈开发的新纪元
Next.js 15的全栈能力代表了Web开发的一个重要里程碑。它不再将自己局限于”前端框架”的定位,而是通过React Server Components、优化的服务端渲染性能、与Tauri 2.0跨平台的深度集成,构建了一个真正端到端的开发平台。
在这个新纪元中,开发者的生产力得到了前所未有的提升。你可以:
- 在同一个项目中编写前后端代码,无需维护多个仓库
- 利用Monorepo工具链管理复杂的企业级应用
- 通过RSC数据流消除客户端状态管理的复杂性
- 使用TypeScript严格模式确保代码质量
- 通过Tauri 2.0将Web应用打包为原生桌面程序
- 享受Vite 6和Nuxt 4等工具带来的开发速度提升
然而,技术选择永远需要基于实际需求。Next.js 15的强大也意味着更高的学习成本和更复杂的架构决策。团队需要评估自身的技术储备、项目规模和长期维护成本。
无论选择哪种技术栈,现代Web开发的核心趋势是明确的:更高的一体化程度、更强的类型安全、更好的开发体验、更优的运行性能。Next.js 15正是这一趋势的优秀代表,它为开发者提供了构建未来应用的完整工具箱。
在这个快速变化的技术世界中,保持学习和适应能力比掌握某个特定框架更为重要。希望本文能为你提供一个清晰的视角,帮助你在Next.js 15、Vue生态、以及跨平台开发的广阔天地中,找到最适合你项目的技术路径。
未来已来,全栈开发的黄金时代正在我们眼前展开。


这RSC数据流讲得真透彻,之前一直没搞明白流式传输咋用
@日记本里的诗 我也是!看完例子才懂分块传输是咋回事,之前文档看得云里雾里。
@日记本里的诗 感觉Edge Runtime和传统Node环境差异比想象中大
Tauri打包体积真能压到5MB以内?实测过的朋友来冒个泡🤔
前几天刚用Next.js搭了个博客,API路由配Edge Runtime后延迟降了一半
@旧梦不散 Edge Runtime延迟确实降得明显,我们项目也试过
Vite 6的冷启动速度是不是有点夸张了,Webpack表示很受伤hhh
@月夜孤帆 Vite 6冷启动我测过,3秒内跑起来,Webpack还在解析依赖hhh
Monorepo里pnpm硬链接确实香,但Windows下偶尔抽风谁懂啊
说到底还是看团队技术栈,我们组Vue老将多,转React成本太高
这个混合渲染模式能不能解决动态广告位缓存问题?求指点
drizzle比prisma轻量不少,小项目用着挺顺手
@狮子阿力 drizzle在CI里构建快得离谱,Docker镜像都小了一圈
@狮子阿力 drizzle小项目确实够用,prisma那种重型ORM反而累赘
Tauri调系统通知是直接走原生API吗,Electron那套太臃肿了
@弑神 Tauri调通知确实是原生API,macOS上弹窗秒出,比Electron流畅太多
Rust写后端逻辑确实稳,就是学习曲线劝退一波新手
这个RSC流式传输实测首屏快了不少,之前项目卡顿问题缓解了
Edge Runtime部署后Web Vitals评分直接拉满,LCP降了70%
Monorepo加turbo太猛了,十个服务一起build也不卡
@Lunar Shadow turbo那个远程缓存才是真·杀手锏,CI快到飞起
Rust那块能不能出个入门实战?光看文档真有点懵
刚用Next.js+Tauri做了个桌面工具,安装包才4.8MB,离谱
数据库直接在组件里查确实方便,但会不会有安全风险啊
@青石剑 安全风险主要看你怎么暴露组件,别把敏感逻辑放客户端就行
混合渲染怎么处理用户个性化推荐?缓存粒度咋控制的
这RSC流式加载实测挺稳,首屏秒出内容👏
混合渲染缓存粒度能按用户ID分吗?个性化内容咋办
刚转React半年,TypeScript strict模式真难顶但确实少翻车
Tauri调通知是直接走系统API,权限还得手动配
@卫尉丞 是,不过tauri.conf里配好就行,比Electron省事多了。
Monorepo里alias配置完简直丝滑,跨包引用跟本地一样
听说Edge Runtime不支持WebSocket?实时通信咋解决啊
Rust学习曲线陡是陡,但写完一个模块后贼有成就感
@喧哗小能手 同感,尤其是内存安全这块,写惯了再回去看JS总怕翻车。
@喧哗小能手 Rust这成就感是实打实的,虽然前期痛苦但回报高
刚看完文章,感觉RSC这块讲得挺明白的,之前一直迷糊。
Tauri打包体积确实小,试过就知道,比Electron轻快多了。
想问下RSC直接查数据库,连接池怎么管理比较好?
文章里提到的Turborepo远程缓存,具体咋配置能细说不?
混合渲染模式下,用户登录状态这种怎么缓存比较安全?
我们项目刚切到Next 15,开发体验确实流畅不少。
Pinia那个例子有点意思,Vue这边状态管理确实越来越简单了。
Edge Runtime不支持WebSocket的话,实时功能是不是得另起服务?
Monorepo用pnpm,mac上没问题,Windows下偶尔出幺蛾子。
Tauri 2.0和Next.js集成,路由这块需要特殊处理吗?
Tauri打包确实轻量,就是系统通知权限配置有点绕
RSC直接查数据库这招太狠了,直接省了API层
Monorepo用pnpm在Windows下确实会抽风,换yarn就稳了