Vue 元框架 · 版本演进

从 Nuxt 3 到 Nuxt 4:一次克制而深思的进化

Nuxt 4 不是一次推倒重来,而是在 Nuxt 3 坚实基础上的精修——更清晰的项目结构、更聪明的数据获取、更可靠的类型系统,以及肉眼可见的开发速度提升。

正式发布 2025.07.15 当前版本 v4.x 阅读约 8 分钟
01 / 总览

「进化」而非「革命」

当年从 Nuxt 2 到 Nuxt 3 是一次彻底的重写——引入 Nitro 服务引擎、自动导入、原生 TypeScript 支持。而 Nuxt 4 走的是另一条路线:它把过去一年通过 Nuxt 3 小版本陆续放出的改进沉淀下来,作为新的默认行为。

官方将其定位为以稳定性为核心的大版本,引入少量必要的破坏性变更以换取更好的开发体验。绝大多数 Nuxt 3 项目只需简单升级即可平滑迁移。整体围绕四大支柱展开:

🗂️

更清晰的结构

新的 app/ 目录,应用代码与配置、依赖彻底分离。

🔄

更聪明的数据获取

统一 useFetch / useAsyncData 行为,自动共享与清理。

🔧

更好的类型体验

按上下文拆分 TS 工程,自动补全更准、报错更少。

更快的 CLI 与开发

冷启动更快,套接字通信替代网络端口,HMR 更可靠。

02 / 项目结构

全新的 app/ 目录布局

最直观的变化是项目组织方式。在 Nuxt 4 中,你的应用代码默认存放在 app/ 目录下:

my-nuxt-app/
├─ app/            # ← 应用代码全部内聚于此
│  ├─ assets/
│  ├─ components/
│  ├─ composables/
│  ├─ layouts/
│  ├─ middleware/
│  ├─ pages/
│  ├─ plugins/
│  ├─ utils/
│  ├─ app.vue
│  ├─ app.config.ts
│  └─ error.vue
├─ content/
├─ public/
├─ shared/          # ← 前后端共享代码
├─ server/          # ← 服务端代码
└─ nuxt.config.ts

这样设计的好处不只是「看起来整洁」:

向后兼容

不想迁移目录?完全没问题。Nuxt 4 会自动检测你现有的扁平结构并照常工作,app/ 目录是可选的。

03 / 数据获取

更聪明、更一致的数据层

Nuxt 团队借这次大版本,系统性地修正了 useAsyncDatauseFetch 的若干不一致问题,并提升了性能。核心改进包括:

// 响应式 key —— id 变化时自动重新获取
const id = useRoute().params.id
const { data, refresh } = await useFetch(
  () => `/api/users/${id}`,
  { key: () => `user-${id}` }  // 相同 key 的组件共享此数据
)

需要说明的是,其中部分能力此前已经通过 Nuxt 3 的小版本陆续放出。Nuxt 4 的不同之处在于把它们设为默认行为,并在此基础上继续打磨数据层。

04 / TypeScript

按上下文拆分的类型工程

Nuxt 4 会为项目中的不同上下文分别创建独立的 TypeScript 工程:应用代码、服务端代码、shared/ 目录、构建器代码各自独立。

带来的实际收益是:在不同上下文中工作时,自动补全更智能、类型推断更准确、令人困惑的错误也更少。而且——你的项目根目录只需要一个 tsconfig.json

升级提醒

这也是升级时最可能带来「意外」的一处:全新的类型分离会暴露出此前被隐藏的类型问题。长期看体验更顺滑,但首次升级时值得留心。

05 / 性能与 DX

更快的 CLI 与开发服务器

配合 v4,Nuxt 团队同步优化了 @nuxt/cli,这些改进在日常开发中体感明显:

优化项说明
更快的冷启动开发服务器启动速度显著提升
Node.js 编译缓存自动复用 V8 编译缓存,减少重复编译
原生文件监听采用 fs.watch API,占用更少系统资源
套接字通信CLI 与 Vite 通过内部 socket 而非网络端口通信,降低开销(Windows 上尤为受益)
06 / 速查

Nuxt 3 vs Nuxt 4 对照表

维度Nuxt 3Nuxt 4
定位完整重写稳定性优先的精修
项目结构较扁平,代码在根目录默认 app/ 目录(可选)
数据获取部分改进经小版本回填自动共享 / 清理 / 响应式 key 为默认
TypeScript单一 TS 上下文按上下文拆分,单 tsconfig
CLI / 通信网络端口内部套接字 + 编译缓存
Nuxt 2 兼容部分保留@nuxt/kit 移除
迁移成本绝大多数项目平滑升级
07 / 实操

如何升级

本次大版本的一个核心目标就是让升级尽可能平滑——大部分破坏性变更在过去一年里都已通过兼容性标志(compatibility flag)开放测试。

1. 更新 Nuxt

# 同时对 lockfile 去重,拉取 unjs 生态的相关更新
npx nuxt upgrade --dedupe

2. 可选:使用自动化迁移工具

# 借助 Codemod 自动完成大部分(并非全部)结构性变更
npx codemod@latest nuxt/4/migration-recipe

3. 测试与调整

跑测试、确认构建正常,修复浮现的问题。需要重点留意的几处:

兜底方案

对于大多数破坏性变更,都提供了配置项可以临时回退到旧行为,让你有时间逐步调整。强烈建议升级前先通读官方 迁移指南

08 / 展望

下一步:Nuxt 5 在路上

官方表示会较快推出 Nuxt 5,届时将带来 Nitro v3h3 v2 以获得更强性能,并采用 Vite Environment API 进一步提升开发体验。

此外,许多新特性会持续进入 3.x 与 4.x 分支,例如:SSR 流式渲染、官方无障碍模块、内置 fetch 缓存策略、更强类型的 fetch 调用、动态路由发现、多应用支持等。Nuxt 3 也会持续获得维护更新(含从 v4 回填的功能),直到 2026 年 1 月底——迁移不必着急。