Back to blog

Next 迁移到 Tanstack Start

Updated: 2026-06-13

起源

自从升级到 Next 16 ,每次本地开发的时候,CPU 占用率直接飙升(我都不用打开监视,声音都能判断出来...)。 打包的时候慢的不行,至少要一分钟。

你们不是用 Rust 重写了 Webpack 吗? 怎么会越来越卡了... 不得已我只能把打包器降级到 webpack 了。

我的电脑是 19 款的 iMac ,虽然不怎么行了,但是开发个网页都不行了吗?

最近正好流行迁移到 Tanstack Start,我也赶一下时髦。

过程

用比较少篇幅介绍下迁移的过程,毕竟官网、AI 帮了不少忙...

路由切换

Next 的 App Router 迁移到 Tanstack Router ,全靠 AI 了。

链接、导航

Tanstack Start 的 Link 和 search 都是有类型的,这一点很好。

'use client'

狗屎全都去掉。

Server Action

原来用过,调试起来很困难。而且搞不懂什么时候是server/client。

Tanstack Start 里有个类似的概念是 createServerFn

虽然也可以用 /api 的形式编写接口,但这样写比较直观,而且返回的数据都是有类型的。

import { createServerFn } from '@tanstack/react-start'

// GET request (default)
export const getPostData = createServerFn().handler(async () => {
  return [{ message: 'Hello from server!' }]
})

// In a route loader
export const Route = createFileRoute('/posts')({
  loader: () => getPostData(),
})

function PostList() {
  const posts = Route.useLoaderData();

  // or 
  const posts = useQuery({
    queryKey: ['posts'],
    queryFn: () => getPosts(),
  })
}

编译器会把 createServerFn 替换成 RPC 调用(有一些陷阱需要避免,参考文档)。

i18n

让 AI 写了个

结果

迁移完以后开发和打包都快的飞起,打包现在就几秒钟... 我的 19 iMac 又可以再战几年了,早知道就早点换了。

我把牛马帝阮的原站点新站点都放出来,可以对比下。

之后打算把脚手架从 Next 迁移到 Tanstack Start 了。