我们正走在发布 Nuxt 4 的路上,但在 Nuxt v3.12 中我们也毫不含糊。
🚀 测试 Nuxt 4 的变更
Nuxt 4 即将来临,现在可以通过在您的 nuxt.config.ts 文件中设置选项,来测试即将到来的下一个主要版本中的行为变更(#26925)
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) - 在模块内访问和更新已解析运行时配置的能力,使用全新的构建时
useRuntimeConfig和updateRuntimeConfig工具(#27117)
🎨 内联 UI 模板
如果您之前使用过 @nuxt/ui-templates,那么您可能需要知道我们已将它们从单独的仓库移入了nuxt/nuxt主仓库(monorepo)中。(这纯粹是一次重构而非功能变更,不过您可以期待 Nuxt v4 的一些新设计。)
✅ 升级
像往常一样,我们建议您运行以下命令进行升级
npx nuxi@latest upgrade --force
这也将刷新你的 lockfile,并确保你拉取 Nuxt 依赖的其他依赖项(尤其是在 unjs 生态系统中)的更新。
完整发布说明
衷心感谢 75 位以上的 Nuxt 贡献者和社区成员,他们参与了此次发布。❤️
最后,感谢您阅读至此!希望您喜欢 v3.12,如果有任何反馈或问题,请随时告知我们。🙏
祝您 Nuxting 愉快 ✨