发布·  

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 Scripts 自动安装

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

👉 敬请关注发布公告——以及一篇更详细的介绍文章!

🌈 层(Layer)自动注册与错误修复

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

我们现在也能正确加载层依赖项,这将解决一系列关于 monorepo 和 git 安装的问题(#27338).

🌐 内置辅助功能改进

我们现在内置了 <NuxtRouteAnnouncer> 组件及相应的 useRouteAnnouncer 组合式函数,未来它们将默认添加到新的 Nuxt 模板中。

有关完整详细信息,请参阅原始 PR (#25741)以及 文档

我们正在继续开发 nuxt/a11y - 敬请期待未来更多相关消息!

🔥 性能改进

我们还带来了一些性能改进,其中许多处于 compatibilityVersion: 4 标志之下,例如放弃了深度响应式的 asyncData 有效负载。

重要的改进包括模块去重(#27475)——这主要适用于在层中指定模块的层用户。在一个项目中,我们看到 Nuxt 启动速度提升了 30 多秒。

我们还通过排除预打包中常见的 ESM 依赖项,改善了 Vite 开发服务器的启动时间,并建议模块开发者考虑采取同样的做法(#27372).

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

并且我们在服务器构建中对更多仅限客户端的组合式函数进行了 Tree Shaking(#27044),并减少了服务器组件有效负载的大小(#26863).

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

我们已经进行了一些变更,旨在使 Nuxt 原生支持多应用,包括一个 multiApp 实验性标志(#27291)以及在运行时并行运行多个 Nuxt 应用实例的能力(#27068).

虽然还没准备好,但请关注跟踪问题单(tracker issue),如果您对此感兴趣,欢迎参与贡献。

⛑️ 开发体验(DX)提升

我们现在在开发服务器日志中序列化了更多内容,包括 VNodes(#27309)和URL。我们还解决了一个可能导致开发服务器冻结的 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)可用,以便它们进行扩展。

这解锁了更好的模块/类型化路由集成,但存在潜在的性能开销——因此如果您遇到任何问题,请提交 Issue。

💪 类型改进

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

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

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

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

  • 支持 installModule 中的类型化模块选项(#26744)
  • 在模块选项中指定与特定构建器(vite/webpack)兼容性的选项(#27022)
  • 用于挂载浏览器水合(hydration)周期的全新 onPrehydrate 钩子(#27037)
  • 在模块内访问和更新已解析运行时配置的能力,使用全新的构建时 useRuntimeConfigupdateRuntimeConfig 工具(#27117)

🎨 内联 UI 模板

如果您之前使用过 @nuxt/ui-templates,那么您可能需要知道我们已将它们从单独的仓库移入了nuxt/nuxt主仓库(monorepo)中。(这纯粹是一次重构而非功能变更,不过您可以期待 Nuxt v4 的一些新设计。)

✅ 升级

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

npx nuxi@latest upgrade --force

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

完整发布说明

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

衷心感谢 75 位以上的 Nuxt 贡献者和社区成员,他们参与了此次发布。❤️

最后,感谢您阅读至此!希望您喜欢 v3.12,如果有任何反馈或问题,请随时告知我们。🙏

祝您 Nuxting 愉快 ✨