您正在浏览 Nuxt 2 文档。前往 Nuxt 3 文档, 或了解更多关于 Nuxt 2 长期支持。
Nuxt 3 Beta 在引入以 Vue 3、Vite 和 Nitro 为基础的全新底层架构后,历经 16 个月的开发,于 2021 年 10 月 12 日正式发布。6 个月后,我们很高兴地宣布,代号为 “Mount Hope” 的首个 Nuxt 3 候选发布版(release candidate)正式推出。🚀

💡 候选发布版是有可能作为稳定版发布的 Beta 版本。这意味着在正式发布稳定版之前,不会进行重大的破坏性变更。
Nuxt 3 Beta 在引入以 Vue 3 、Vite 和 Nitro 为基础的全新底层架构后,历经 16 个月的开发,于 2021 年 10 月 12 日 正式发布。
今天,6 个月后,我们很高兴地宣布,代号为 "Mount Hope" 的首个 Nuxt 3 候选发布版(release candidate)正式推出。🚀
自 Beta 版发布以来,我们见证了 1000 个以上已合并的 Pull Request 、900 个以上 issues 的处理、2000 个以上的提交 ,以及 Nuxt 被 3600 个以上的开源仓库 所使用。
不仅是 Nuxt 核心团队,还有 160 位以上的贡献者 为我们提供了帮助。看到 Beta 测试者的积极采用,我们深感感激。6 个月内获得了 5000 个以上的 stars 和 340k 以上的下载量 。
如果您要从 Nuxt 3 的早期版本迁移,可以查看发布说明 。
Vue 3 三个月前成为新的默认版本 ,带来了更好的性能、Composition API 以及 TypeScript 支持。Nuxt 3 在这些改进的基础上,提供了具备一流 SSR 支持的出色 Vue 3 体验。
Nuxt 3 使用 TypeScript 重写,因此完全类型化,并提供了便捷的快捷方式,让您在编码时能够访问精确的类型信息。
此外,Nuxt 会自动生成 TS 配置文件(.nuxt/tsconfig.json)和全局类型文件(.nuxt/nuxt.d.ts),让您无需任何配置即可获得完整的 TypeScript 体验。
如果需要,还可以运行 npx nuxi typecheck 命令,在 Nuxt 应用程序中手动进行类型检查。
更多详情请参阅 Nuxt 3 中的 TypeScript 。
我们决定将 Vite 作为 Nuxt 应用程序的默认打包工具。我们非常欣赏 Evan You 在 Vue 3 上所做的工作,看到出色的 Vite 社区 所做的贡献,选择押注于此是一个轻松的决定。
同样,对我们来说,维护 Webpack 的支持也很重要。Webpack 是一个成熟的构建工具,可以帮助从 Nuxt 2 项目平滑迁移。
也就是说,Nuxt 3 官方同时支持 Vite 和 Webpack。
要使用 Webpack 5,请在 Nuxt 配置中启用它,并安装 @nuxt/webpack-builder :
import { defineNuxtConfig } from 'nuxt'
export default defineNuxtConfig({
builder: 'webpack' // default: 'vite'
})
作为与 Vite 和 Webpack 深度集成的一部分,我们还创建了 unplugin 。这是一个面向构建工具的统一插件系统,可以让您编写在 Rollup、Vite 和 Webpack 上均可运行的通用插件。
我们正在为将 Nuxt 打造成不依赖特定构建工具的框架奠定基础,以便应对 JavaScript 永无止境的演进生态系统。
关于性能的补充说明:我们正在推进 vite-node 和 Webpack lazyCompilation ,为 Nuxt 应用程序的服务端包带来按需打包能力。无论应用程序规模多大,Nuxt 始终能在数秒内启动。
Nuxt 3 的一大亮点是全新的服务器引擎 UnJS/Nitro ,它使 Nuxt 成为了一个不依赖特定提供商的强大全栈框架。
Nuxt 2 的首要痛点是无法实现健壮的服务器集成。虽然有 serverMiddleware ,但开发体验并不理想——缺乏别名支持,且不够稳定。
其次,生产服务器未针对 lambda 环境进行优化,启动时间慢,安装体积也较大。
Nitro 具备多项功能,可将 Nuxt 提升到新的高度:
这意味着 Nuxt 3 及项目中使用的所有内容都成为了 devDependencies 。Nitro 会进行代码分割,将所有内容打包到可移植、紧凑的 .output 目录中,可部署到任意托管提供商 。
请观看这段简短视频 了解其效果。
2018 年,我们开始创建可复用、不依赖特定框架的 JavaScript 库,如 unjs/consola 和 unjs/ipx 。这些库体积小、经过充分测试、相互兼容,旨在为整个 JS 生态系统带来价值。如今,我们在名为 UnJS 的新 GitHub 组织下拥有了更大的集合。该组织旨在提供一套 ESM 友好 的 JavaScript 工具,适用于包括 Node.js、Deno、浏览器和 Worker 在内的各种 JavaScript 环境。
历经 4 年多的积累,我们打下了这一基础,让 Nuxt 可以在任何地方运行,并探索超越我们想象的可能性!
请访问 https://github.com/unjs 查看驱动 Nuxt 3 的所有包。
一切从 pages 目录开始。每个文件都映射到一个路由。得益于 Vue 团队在 vue-router 上的出色工作,我们成为了前端框架生态系统中最早支持动态嵌套路由的框架之一。
pages 目录 保持不变,动态路由 的语法得到了改进,支持在单个路由中设置多个参数。此外,pages 目录现在是可选的!您可以仅使用 app.vue 文件启动项目,Nuxt 将改用最小化的通用路由器来优化包体积(节省 28kB,标准情况下缩小 21%)。
详情请参阅 pages 迁移指南 。
plugins 目录 中的所有文件会在创建主组件(app.vue )之前自动导入并执行。
components 目录 是另一个精心设计的功能。其中的所有组件均可在模板中直接使用,无需手动导入。Nuxt 会分析您的代码,仅将实际使用的组件包含在最终包中,从而同时实现出色的开发体验和生产环境下的高性能。
得益于 Vue 3 和 Composition API,新增了 composables 目录 ,用于将 Vue Composables 自动导入到应用程序中。
static 目录更名为 public ,用于提供所有原始文件(如 favicon.ico 和 robots.txt 等)。
最后,新增的 server 目录 具备强大的功能,可为 Vue 应用程序添加服务器路由和后端逻辑。
Nuxt 提供了强大的 API 用于创建模块。模块是在开发模式下启动 Nuxt 或为生产环境构建项目时按顺序执行的代码片段。通过模块,您可以封装、测试自定义解决方案,并将其作为 npm 包共享,而无需在项目中添加不必要的样板代码。模块可以挂钩到 Nuxt builder 的生命周期事件、提供运行时应用模板、更新配置,以及根据需要执行其他自定义操作。
借助 Nuxt Kit ,我们改进了模块语法,以获得更好的默认值、类型支持以及跨 Nuxt 版本的兼容性。
请参阅模块作者指南 和 Nuxt 3 兼容模块 。
我们每天都对社区通过 issues、discussions、博客文章、视频、Nuxt 模块等各种形式所做的贡献深感钦佩 💚
如果您还没有尝试过,并且希望提供支持,请查看以下链接:
这是 Nuxt 新篇章的开始,是时候开始一个新的 Nuxt 3 项目 了。