我们正在迈向 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。它目前处于公共预览阶段,但我们将很快进行公共发布,因此我们已经为使用时会提示安装 @nuxt/scripts
模块的 composables 添加了一些存根。
👉 请密切关注正式发布以及解释更多的文章!
🌈 自动注册层和 bug 修复
就像 ~/modules
一样,现在在 ~/layers
目录中的任何层都将自动注册为项目的层(#27221)。
我们现在也正确加载层的依赖项,这应该解决一系列与 monorepos 和 git 安装相关的问题(#27338)。
🌐 内置辅助功能改进
我们现在内置了 <NuxtRouteAnnouncer>
组件和对应的 useRouteAnnouncer
composable,并且默认情况下将其添加到新的 Nuxt 模板中。
有关详细信息,请参阅原始 PR (#25741) 和文档。
我们正在继续开发 nuxt/a11y
- 敬请期待未来的更多消息!
🔥 性能提升
我们还实现了一些性能改进,其中很多都在 compatibilityVersion: 4
标志背后,如深层响应式的 asyncData 载荷的变动。
重要的改进包括模块去重(#27475) - 这将主要应用于在层中指定模块的用户。在一个项目中,启动 Nuxt 的时间改善了30秒以上。
我们还通过在预打包中排除常见的 ESM 依赖项来提高 Vite 开发服务器的启动时间,并建议模块作者考虑采取同样的做法(#27372)。
我们改进了块的确定性,因此连续构建应更不太可能具有 完全 不同的块哈希(#27258)。
我们还从服务器构建中遗弃了更多仅客户端的 composable (#27044),并减小了服务器组件负载的大小(#26863)。
👨👩👧👦 多应用程序支持
我们已经实现了几项变更,使我们能够原生支持 Nuxt 中的多应用程序,包括一个 multiApp
实验性标志(#27291)以及在运行时同时运行多个 Nuxt 应用程序实例的能力(#27068)。
尽管它还不完善,请在跟踪器问题上关注,并且如果您对此感兴趣,请随时提供帮助。
⛑️ 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
)增加。
这样可以更好地实现模块/类型化路由集成,但可能会造成性能开销 - 如果遇到任何问题,请提交问题。
💪 类型改进
我们现在支持在服务器组件的 #fallback
slot 中使用类型化(#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 开发愉快 ✨