您正在浏览 Nuxt 2 文档。前往 Nuxt 3 文档, 或了解更多关于 Nuxt 2 长期支持

← Back

Nuxt 3 Release Candidate 发布

Nuxt 3 Beta 在引入以 Vue 3、Vite 和 Nitro 为基础的全新底层架构后,历经 16 个月的开发,于 2021 年 10 月 12 日正式发布。6 个月后,我们很高兴地宣布,代号为 “Mount Hope” 的首个 Nuxt 3 候选发布版(release candidate)正式推出。🚀

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 & TypeScript

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 & Webpack

我们决定将 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 始终能在数秒内启动。

Nitro & UnJS

Nuxt 3 的一大亮点是全新的服务器引擎 UnJS/Nitro ,它使 Nuxt 成为了一个不依赖特定提供商的强大全栈框架。

为什么选择 Nitro?

Nuxt 2 的首要痛点是无法实现健壮的服务器集成。虽然有 serverMiddleware ,但开发体验并不理想——缺乏别名支持,且不够稳定。

其次,生产服务器未针对 lambda 环境进行优化,启动时间慢,安装体积也较大。

Nitro 具备多项功能,可将 Nuxt 提升到新的高度:

  • server/ 目录 的热模块替换
  • 与 pages/ 目录类似的基于文件系统的服务器路由
  • 不依赖 node_modules 的可移植、紧凑的部署方式
  • 通过内置爬虫实现路由缓存和静态预渲染
  • 通过代码分割和异步 chunk 加载实现快速服务器启动
  • 更多功能...

这意味着 Nuxt 3 及项目中使用的所有内容都成为了 devDependencies 。Nitro 会进行代码分割,将所有内容打包到可移植、紧凑的 .output 目录中,可部署到任意托管提供商

请观看这段简短视频 了解其效果。

统一的 JavaScript 工具

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

一切从 pages 目录开始。每个文件都映射到一个路由。得益于 Vue 团队在 vue-router 上的出色工作,我们成为了前端框架生态系统中最早支持动态嵌套路由的框架之一。

pages 目录 保持不变,动态路由 的语法得到了改进,支持在单个路由中设置多个参数。此外,pages 目录现在是可选的!您可以仅使用 app.vue 文件启动项目,Nuxt 将改用最小化的通用路由器来优化包体积(节省 28kB,标准情况下缩小 21%)。

详情请参阅 pages 迁移指南

Plugins

plugins 目录 中的所有文件会在创建主组件(app.vue )之前自动导入并执行。

Components

components 目录 是另一个精心设计的功能。其中的所有组件均可在模板中直接使用,无需手动导入。Nuxt 会分析您的代码,仅将实际使用的组件包含在最终包中,从而同时实现出色的开发体验和生产环境下的高性能。

Composables

得益于 Vue 3 和 Composition API,新增了 composables 目录 ,用于将 Vue Composables 自动导入到应用程序中。

Public

static 目录更名为 public ,用于提供所有原始文件(如 favicon.ico 和 robots.txt 等)。

Server

最后,新增的 server 目录 具备强大的功能,可为 Vue 应用程序添加服务器路由和后端逻辑。

模块

Nuxt 提供了强大的 API 用于创建模块。模块是在开发模式下启动 Nuxt 或为生产环境构建项目时按顺序执行的代码片段。通过模块,您可以封装、测试自定义解决方案,并将其作为 npm 包共享,而无需在项目中添加不必要的样板代码。模块可以挂钩到 Nuxt builder 的生命周期事件、提供运行时应用模板、更新配置,以及根据需要执行其他自定义操作。

借助 Nuxt Kit ,我们改进了模块语法,以获得更好的默认值、类型支持以及跨 Nuxt 版本的兼容性。

请参阅模块作者指南 Nuxt 3 兼容模块

致谢

我们每天都对社区通过 issues、discussions、博客文章、视频、Nuxt 模块等各种形式所做的贡献深感钦佩 💚

如果您还没有尝试过,并且希望提供支持,请查看以下链接:

这是 Nuxt 新篇章的开始,是时候开始一个新的 Nuxt 3 项目 了。