✨ 本地模块开发 DX
我们推出了一系列更改,以支持本地模块并改善 DX。
我们现在会自动扫描你的 ~/modules 文件夹,并将其中的顶级文件注册为项目中的模块 (#19394)。
当这些文件发生更改时,我们将自动重启 nuxt 服务器。
export default defineNuxtConfig({
modules: [
'@nuxtjs/tailwindcss',
- '~/modules/purge-comments'
]
})
我们现在还导出了 nuxt/kit,以便在本地项目中轻松访问 kit 组合式函数,而无需安装 @nuxt/kit (#19422)。
♻️ 重启 Nuxt
你可以将文件添加到 watch 数组中以自动重启服务器 (#19530)。这对于模块作者来说可能特别有用。你还可以通过新的 restart 钩子触发 Nuxt 服务器的重启 (#19084)。
🔥 性能改进
作为最佳实践,我们将静态资源的 maxAge 增加到了 1 年 (#19335),并支持对你的构建进行更多的 tree-shaking (#19508)。

我们现在还支持使用对象语法预加载带有路由的 <NuxtLink> (#19120)
<NuxtLink :to="{ name: 'home', query: { year: '2023' } }">Home</NuxtLink>
我们还会追踪你使用的每个模块执行设置所花费的时间,如果耗时过长则会发出警告。你可以通过运行带有 DEBUG=1 的开发服务器来查看所有这些数值 (#18648)。
DEBUG=1 npx nuxt dev
ℹ Module pages took 1.5ms to setup.
ℹ Module meta took 3.15ms to setup
ℹ Module components took 4.5ms to setup.
...
你还可以通过配置组合式函数在特定环境中进行 tree-shake (#19383) 或自动注入魔法键 (#19490),从而选择启用 Nuxt 的部分内部优化。
🐛 错误处理
我们现在默认处理分块错误 (#19086),这意味着如果你的网站通过重新部署进行更新,我们会在导航时自动处理重新加载。
要禁用此行为,请将 experimental.emitRouteChunkError 选项设置为 'manual',并通过新的 reloadNuxtApp 组合式函数自行处理。了解更多关于我们在 chunk-reload.client.ts 插件中如何实现的内容。
你还可以设置 experimental.restoreState 以在重新加载时保留部分应用状态
defineNuxtConfig({
experimental: {
restoreState: true
}
})
我们还有一个新的实验性错误处理组件:<NuxtClientFallback> (#8216),它可以捕获服务端渲染时的错误,用回退内容替换它们,并在客户端细粒度地触发带有错误的组件部分的重新渲染。可以通过 experimental.clientFallback 启用此功能——非常欢迎提供反馈!
⚡️ Head 改进
我们已经迁移到直接使用 unhead (#19519)——并自动从你的客户端构建中对诸如 useServerHead 这样仅限服务端的 head 组合式函数进行 tree-shake (#19576),这意味着你可以拥有出色的 SEO,而无需在客户端构建中包含仅与爬虫相关的元标签逻辑。
还有一个新的 useHeadSafe 组合式函数,用于处理不受信任的用户输入的净化 (#19548)。
🪵 浏览器 DevTools 中的更佳日志记录
通过与 Chrome DevTools 团队合作,我们在 unjs + Nuxt 生态系统中推出了一些功能,这意味着我们现在可以提供一流的支持,在你的(目前基于 Chromium 的)浏览器中从日志中隐藏 Nuxt 内部堆栈跟踪 (#19243)。我们还通过实现 console.createTask,对涉及 Nuxt 钩子的堆栈跟踪进行了多项改进 (unjs/hookable#69 和 unjs/hookable#68)。
| 之前 | 之后 |
|---|---|
![]() | ![]() |
💪 类型改进
服务器 API 路由的类型现在更加准确——从返回类型中剔除了不可序列化的类型 (unjs/nitro#1002)。
我们现在还为更多的 NuxtApp 提供了类型定义,并正确地为未知注入提供类型,以实现更高的类型安全性 (#19643)。
如果你在 Nuxt 数据获取组合式函数中使用 transform + default 时一直在为正确的类型苦恼,别担心——我们现在可以正确推断这些类型了 (#19487)。
⚗️ Nitro 增强
此版本附带 Nitro v2.3,它自身带来了许多改进。查看 发布说明 了解更多信息。
我们现在在 Nitro 服务端路由中支持 useAppConfig (#19489)——这是一个备受期待的更改。现在 useAppConfig 在整个应用中始终可用,用于来自层、模块等的非运行时配置。
我们还添加了一个 nitro:build:public-assets 钩子,允许修改 Nitro 预渲染/构建阶段输出的资源 (#19638)。
🛠️ 构建更改
作为迈向 对 PNP 的一流支持以及无需 --shamefully-hoist 的 pnpm 支持的一部分,我们放弃了对一些使用 CJS 解析模式的内部(已弃用)工具的支持 (#19537 和 #19608)。
我们现在还使用 ESM 搜索路径解析 nuxt、@nuxt/kit 等依赖项。我们将密切关注这一点。
我们还在为支持新的 TypeScript Node16 模块解析奠定基础 (#19606),作为其中的一部分,我们更改了运行时输出的格式(使用 .js 代替 .mjs 扩展名,为子路径导出提供 types 字段等)。
🗺️ 自定义配置模式(高级)
我们一直在测试一项实验性功能,允许模块和用户扩展 Nuxt 配置模式 (#15592),现在我们默认启用了此功能 (#19172)。我们期望这对于模块和层/主题作者特别有用,并能为他们的用户带来更好的开发体验(DX)。
更新日志
通过 比较更改查看完整的更改日志,或者在 GitHub 上查看发布版本。
我们要感谢所有为这个版本做出贡献的 28 位贡献者 💚

