我们正在向 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
模块。
👉 请关注发布和解释更多内容的文章!
🌈 层自动注册和错误修复
就像 ~/modules
一样,项目中的 ~/layers
目录中的任何层现在都将自动注册为项目中的层(#27221)。
我们现在还正确加载层依赖项,这应该解决使用 monorepo 和 git 安装的一系列问题(#27338)。
🌐 内置的无障碍改进
我们现在有一个内置的 <NuxtRouteAnnouncer>
组件和相应的 useRouteAnnouncer
组合,以后将默认添加到新的 Nuxt 模板中。
详情请参见 原始 PR (#25741) 和 文档。
我们正在继续开发 nuxt/a11y
——请期待未来的更多消息!
🔥 性能改进
我们也进行了多项性能改进,其中许多都在 compatibilityVersion: 4
标志后面,例如不再使用深度响应式的 asyncData 负载。
显著的改进包括模块去重(#27475)——这主要适用于在层中指定模块的用户。在一个项目中,我们看到 Nuxt 启动时间提高了 30 秒以上。
我们还通过排除常见的 ESM 依赖项来改进 Vite 开发服务器启动时间,并建议模块作者考虑这样做(#27372)。
我们改进了块的确定性,因此连续构建的块哈希不太可能完全不同(#27258)。
我们还从服务器构建中摇掉了更多仅客户端的组合(#27044),并减少了服务器组件负载的大小(#26863)。
👨👩👧👦 多应用支持
我们进行了一些更改,使我们能够原生支持 Nuxt 中的多应用,包括一个 multiApp
实验标志(#27291)和在运行时并行运行多个 Nuxt 应用实例的能力(#27068)。
虽然还未完全准备好,但请关注 跟踪问题,如果这对您有兴趣,请随时参与。
⛑️ 开发者体验改进
我们现在在开发服务器日志中序列化更多内容,包括 VNodes(#27309)和 URLs。我们还修复了一个可能导致开发服务器冻结的 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
插槽的类型化(#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 monorepo 中。(这纯粹是重构而不是更改,但您可以期待 Nuxt
Nuxt 2 End-of-Life (EOL)
Nuxt 2 will reach End of Life (EOL) on June 30th, 2024. We've partnered with HeroDevs on offering Never-Ending Support (NES).
Refreshed Nuxt ESLint Integrations
We revamped our ESLint integrations to support ESLint v9 with the flat config, as well as a new module with many more capabilities.