发布·  

Nuxt 3.12

Nuxt 3.12 发布了——充满了改进,并为 Nuxt 4 铺平了道路!
Daniel Roe

Daniel Roe

@danielroe.dev

我们正朝着 Nuxt 4 的发布迈进,但我们在 Nuxt v3.12 中并未止步。

🚀 测试 Nuxt 4 的变化

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

nuxt.config.ts
export default defineNuxtConfig({
  future: {
    compatibilityVersion: 4,
  },
})

在合并 Nuxt 4 的 PR 时,我们一直在这些标记后面启用它们。我们尽可能地争取向后兼容——我们的测试矩阵在 v3 和 v4 兼容模式下运行相同的测试用例。

这里有很多要说的,有 10 多个不同的 PR 和行为变化已被记录和可测试,但要获取包括迁移步骤在内的完整详细信息,请参阅v4 升级文档

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

📜 Nuxt 脚本自动安装

我们一直在逐步努力发布Nuxt Scripts。它目前处于公开预览阶段,但我们即将发布正式版本,因此我们为组合式函数添加了一些存根,这些存根在使用时将提示安装 @nuxt/scripts 模块。

👉 敬请关注发布——以及一篇解释更多内容的文章!

🌈 层自动注册和错误修复

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

我们现在还正确加载层依赖项,这应该能解决单体仓库和 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。我们还解决了可能导致开发服务器冻结的错误。

当在浏览器中访问私有运行时配置时,我们现在会提供更具信息量的错误消息通知您(#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单体仓库中。(这纯粹是重构,而非更改,尽管您可以期待 Nuxt v4 的一些新设计。)

✅ 升级

像往常一样,我们建议您运行以下命令进行升级

npx nuxi@latest upgrade --force

这也将刷新你的 lockfile,并确保你拉取 Nuxt 依赖的其他依赖项(尤其是在 unjs 生态系统中)的更新。

完整发布说明

阅读 Nuxt v3.12.0 的完整发行说明。

衷心感谢参与此次发布的 75+ 位 Nuxt 贡献者和社区成员。❤️

最后,感谢您阅读到这里!我们希望您喜欢 v3.12,如果您有任何反馈或问题,请告诉我们。🙏

祝您 Nuxting 愉快 ✨