我们正在为 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。它目前处于公开预览阶段,但我们即将公开发布,因此我们为 composables 添加了一些存根,这些存根(如果使用)将提示安装 @nuxt/scripts
模块。
👉 请关注发布 - 以及一篇解释更多内容的文章!
🌈 层自动注册和错误修复
就像 ~/modules
一样,项目中 ~/layers
目录中的任何层现在都将自动注册为项目中的层 (#27221)。
我们现在还可以正确加载层依赖项,这应该可以解决单仓库和 Git 安装中的一系列问题 (#27338)。
🌐 内置的可访问性改进
我们现在有一个内置的 <NuxtRouteAnnouncer>
组件和相应的 useRouteAnnouncer
composable,它将在未来默认添加到新的 Nuxt 模板中。
有关完整详细信息,请参阅 原始 PR (#25741) 和 文档。
我们正在继续开发 nuxt/a11y
- 预计将来会听到更多关于它的消息!
🔥 性能改进
我们也进行了一些性能改进,其中许多都位于 compatibilityVersion: 4
标志之后,例如放弃深度反应式 asyncData 负载。
重要的改进包括对模块进行重复数据删除 (#27475) - 这主要适用于在其层中指定模块的层用户。在一个项目中,我们看到 Nuxt 启动时间提高了 30 秒以上。
我们还通过从预捆绑中排除常见的 ESM 依赖项来提高了 Vite 开发服务器的启动时间,并建议模块作者考虑执行相同的操作 (#27372)。
我们改进了块确定性,因此顺序构建不太可能具有完全不同的块哈希 (#27258)。
并且我们从服务器构建中剔除了更多仅客户端的 composables (#27044),并减少了服务器组件负载的大小 (#26863)。
👨👩👧👦 多应用支持
我们进行了一些更改,使我们能够在 Nuxt 中原生支持多应用,包括一个 multiApp
实验性标志 (#27291) 和能够在运行时并行运行多个 Nuxt 应用实例的功能 (#27068)。
虽然它尚未准备好,但请关注 跟踪问题,如果您对此感兴趣,请随时参与。
⛑️ 开发人员体验提升
我们现在在开发服务器日志中序列化了更多内容,包括 VNodes (#27309) 和 URL。我们还解决了一个可能导致开发服务器冻结的错误。
当在浏览器中访问私有运行时配置时,我们现在会显示更具信息性的错误消息 (#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) - 能够使用新的构建时
useRuntimeConfig
和updateRuntimeConfig
实用程序访问和更新模块内的已解析运行时配置 (#27117)
🎨 内联 UI 模板
如果您以前使用过 @nuxt/ui-templates
,那么您可能需要知道我们已将其从 单独的存储库 移动到 nuxt/nuxt 单仓库中。(这纯粹是重构而不是更改,尽管您可以预期 Nuxt v4 会有一些新的设计。)
✅ 升级
像往常一样,我们建议您运行以下命令进行升级
npx nuxi@latest upgrade --force
这也会刷新您的锁定文件,并确保您从 Nuxt 依赖的其他依赖项(尤其是在 unjs 生态系统中)中获取更新。
完整的发行说明
衷心感谢 75 多位 Nuxt 贡献者和社区成员参与了本次发布。❤️
最后,感谢您阅读至此!我们希望您喜欢 v3.12,如果您有任何反馈或问题,请告诉我们。🙏
祝您 Nuxt 开发愉快 ✨