通过 100+ 个技巧的集合学习 Nuxt!
发布·  

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 兼容模式下运行相同的 fixtures。

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

我们非常感谢对 Nuxt 4 中即将到来的内容进行早期测试!🙏

📜 Nuxt Scripts 自动安装

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

👉 关注发布 - 以及一篇解释更多的文章!

🌈 Layer 自动注册和错误修复

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

我们现在还正确加载 layer 依赖项,这应该可以解决 monorepos 和 git 安装中的一系列问题 (#27338)。

🌐 内置可访问性改进

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

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

我们正在继续开发 nuxt/a11y - 期待在未来听到更多关于它的消息!

🔥 性能改进

我们还进行了一些性能改进,其中许多改进都在 compatibilityVersion: 4 标志之后,例如从深度响应式 asyncData payloads 转向。

重大改进包括重复数据删除模块 (#27475) - 这将主要适用于在其 layers 中指定模块的 layer 用户。在一个项目中,我们看到启动 Nuxt 的时间缩短了 30 多秒。

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

我们改进了 chunk 确定性,因此顺序构建不太可能具有完全不同的 chunk hashes (#27258)。

我们从你的服务器构建中 tree shake 掉了更多的 client-only composables (#27044),并减小了服务器组件 payloads 的大小 (#26863)。

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

我们进行了一些更改,使我们朝着在 Nuxt 中原生支持多应用的方向发展,包括 multiApp 实验性标志 (#27291) 以及在运行时并行运行多个 Nuxt 应用实例的能力 (#27068)。

虽然它尚未准备就绪,但请务必关注 tracker issue,如果您对此感兴趣,请随时参与。

⛑️ DX 改进

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

当在浏览器中访问私有运行时配置时,我们现在会通过更具信息性的错误消息告知你 (#26441)。

🪨 稳定功能

我们删除了一些已稳定下来的实验性选项,我们认为这些选项不再需要配置

  • experimental.treeshakeClientOnly(自 v3.0.0 起默认启用)
  • experimental.configSchema(自 v3.3.0 起默认启用)
  • experimental.polyfillVueUseHead(自 v3.4.0 起禁用) - 可在用户端使用 plugin 实现
  • experimental.respectNoSSRHeader(自 v3.4.0 起禁用) - 可在用户端使用 server middleware 实现

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

这解锁了更好的模块/类型化路由集成,但可能会带来潜在的性能成本 - 因此,如果您遇到任何问题,请提交 issue。

💪 类型改进

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

我们还改进了你生成的 tsconfig.json 中的一些默认设置,包括如果你本地安装了 TypeScript v5.4 版本,则设置 module: 'preserve' (请参阅文档) - 请参阅 #26667, #27485

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

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

  • installModule 中支持类型化的模块选项 (#26744)
  • 在模块选项中指定与某些 builders (vite/webpack) 的兼容性的选项 (#27022)
  • 一个新的 onPrehydrate hook,用于挂钩到浏览器 hydration 周期中 (#27037)
  • 在模块中访问和更新已解析的运行时配置的能力,具有新的构建时 useRuntimeConfigupdateRuntimeConfig utils (#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 快乐 ✨