Nuxt3 中文课程《实战全栈开发简书》限时优惠
Release·  

Nuxt 3.12

Nuxt 3.12 发布了——包含了大量改进,并为 Nuxt 4 做好准备!

我们正在向 Nuxt 4 发布的道路上前进,但我们并未在 Nuxt v3.12 中有所保留。

🚀 测试 Nuxt 4 变更

Nuxt 4 已经近在眼前,现在可以通过在 nuxt.config 文件中设置一个选项来测试即将到来的下一个主要版本的行为变化(#26925):

export default defineNuxtConfig({
  future: {
    compatibilityVersion: 4,
  },
})

随着我们合并 Nuxt 4 的 PR,我们在这个标志后面启用了它们。我们尽可能地保持向后兼容——我们的测试矩阵在 v3 和 v4 兼容模式下运行相同的测试用例。

这里有很多内容可以说,有 10 多个不同的 PR 和行为变更已经记录并可测试,但详细信息,包括迁移步骤,请参阅 v4 升级文档

我们非常感谢您对即将到来的 Nuxt 4 的早期测试!🙏

📜 Nuxt Scripts 自动安装

我们一直在逐步发布 Nuxt Scripts。目前它处于公开预览阶段,但我们已经接近正式发布,因此我们添加了一些存根组合,当使用它们时会提示安装 @nuxt/scripts 模块。

👉 请关注发布和解释更多内容的文章!

🌈 层自动注册和错误修复

就像 ~/modules 一样,项目中的 ~/layers 目录中的任何层现在都将自动注册为项目中的层(#27221)。

我们现在还正确加载层依赖项,这应该解决使用 monorepo 和 git 安装的一系列问题(#27338)。

🌐 内置的无障碍改进

我们现在有一个内置的 <NuxtRouteAnnouncer> 组件和相应的 useRouteAnnouncer 组合,以后将默认添加到新的 Nuxt 模板中。

详情请参见 原始 PR (#25741)文档

我们正在继续开发 nuxt/a11y——请期待未来的更多消息!

🔥 性能改进

我们也进行了多项性能改进,其中许多都在 compatibilityVersion: 4 标志后面,例如不再使用深度响应式的 asyncData 负载。

显著的改进包括模块去重(#27475)——这主要适用于在层中指定模块的用户。在一个项目中,我们看到 Nuxt 启动时间提高了 30 秒以上。

我们还通过排除常见的 ESM 依赖项来改进 Vite 开发服务器启动时间,并建议模块作者考虑这样做(#27372)。

我们改进了块的确定性,因此连续构建的块哈希不太可能完全不同(#27258)。

我们还从服务器构建中摇掉了更多仅客户端的组合(#27044),并减少了服务器组件负载的大小(#26863)。

👨‍👩‍👧‍👦 多应用支持

我们进行了一些更改,使我们能够原生支持 Nuxt 中的多应用,包括一个 multiApp 实验标志(#27291)和在运行时并行运行多个 Nuxt 应用实例的能力(#27068)。

虽然还未完全准备好,但请关注 跟踪问题,如果这对您有兴趣,请随时参与。

⛑️ 开发者体验改进

我们现在在开发服务器日志中序列化更多内容,包括 VNodes(#27309)和 URLs。我们还修复了一个可能导致开发服务器冻结的 bug。

在浏览器中访问私有运行时配置时,我们现在提供更详细的错误消息(#26441)。

🪨 稳定功能

我们移除了已经稳定并且我们认为不再需要配置的一些实验选项:

  • experimental.treeshakeClientOnly(自 v3.0.0 起默认启用)
  • experimental.configSchema(自 v3.3.0 起默认启用)
  • experimental.polyfillVueUseHead(自 v3.4.0 起禁用)——可以通过插件在用户端实现
  • experimental.respectNoSSRHeader(自 v3.4.0 起禁用)——可以通过服务器中间件在用户端实现

我们还默认启用了 scanPageMeta#27134)。这会提取 definePageMeta 宏中的任何页面元数据,并使其可供模块(如 @nuxtjs/i18n)使用,以便它们可以增强它。

这解锁了更好的模块/类型路由集成,但可能会有性能成本——如果您遇到任何问题,请提交问题。

💪 类型改进

我们现在支持服务器组件中 #fallback 插槽的类型化(#27097)。

我们还改进了生成的 tsconfig.json 中的一些默认值,包括在本地安装 TypeScript v5.4 版本时设置 module: 'preserve'参见文档)——参见 #26667#27485

📦 模块作者/高级用户改进

我们为模块作者提供了一系列类型改进,包括:

  • installModule 中支持类型化的模块选项(#26744
  • 可以在模块选项中指定与某些构建器(vite/webpack)的兼容性(#27022
  • 新的 onPrehydrate 钩子,用于挂钩到浏览器的水合周期中(#27037
  • 在模块中访问和更新解析后的运行时配置的新工具,包括构建时的 useRuntimeConfigupdateRuntimeConfig#27117

🎨 内联 UI 模板

如果您之前使用了 @nuxt/ui-templates,那么值得知道的是我们已经将它们从单独的存储库移动到了 nuxt/nuxt monorepo 中。(这纯粹是重构而不是更改,但您可以期待 Nuxt