我们继续致力于 Nitro v3 和 Nuxt v4 的发布。但我们很高兴在圣诞节前(刚好)发布 Nuxt v3.15。
❄️ 雪花飘飘!
节日快乐!当你启动 Nuxt 时 (如果你在北半球) 你会发现加载屏幕上有些雪花 (#29871)。
⚡️ 集成 Vite 6
Nuxt v3.15 首次包含了 Vite 6。虽然这是一个主要版本,但我们预计这对 Nuxt 用户不会造成破坏性更改(请参阅完整的 迁移指南)。但是,如果你有依赖于特定 Vite 版本的包,请小心。
Vite 6 最显著的变化之一是新的环境 API,我们希望与 Nitro 一起使用,以改善服务器开发环境。敬请关注这一动态!
你可以在 Vite 6 更新日志 中查看完整的变更列表。
🪵 Chromium 开发工具的改进
我们谈到了很多关于 Nuxt DevTools 的内容,但 v3.15 版本在 Chromium 浏览器的开发工具中提供了更好的开发模式集成。
我们现在使用 Chrome 开发工具扩展 API 来支持在浏览器开发工具性能面板中打印 nuxt hook 的时间。
🗺️ callOnce
的导航模式
callOnce
是一个内置的 Nuxt 可组合函数,只在运行一次的情况下执行代码。例如,如果代码在服务器上运行,那么在客户端不会再次运行。但有时你确实希望代码在每次导航时都运行 - 只需避免最初的服务器/客户端双重加载。为此,新增了 mode: 'navigation'
选项,代码只会在每次导航时运行一次。(有关更多信息,请参阅 #30260)。
await callOnce(() => counter.value++, { mode: 'navigation' })
🥵 模板、页面 + 页面元数据的热更新
我们现在对 Nuxt 的虚拟文件(如路由、插件、生成文件)以及页面元数据(在 definePageMeta
宏中)实现了热模块替换 (#30113)。
这意味着在开发时你会有更快的体验,并且在更改路由时不需要重新加载页面。
📋 页面元数据增强
我们现在支持通过 experimental.extraPageMetaExtractionKeys
提取额外的页面元数据键(可能被模块作者使用) (#30015)。这使得模块作者能够在构建时在 pages:resolved
钩子中使用这些信息。
我们还支持在 definePageMeta
中使用局部函数 (#30241)。这意味着你可以这样做:
function validateIdParam(route) {
return !!(route.params.id && !isNaN(Number(route.params.id)))
}
definePageMeta({
validate: validateIdParam,
})
🔥 性能改进
如果在水合应用时将使用浏览器中的应用清单,我们现在将其预加载 (#30017)。
如果可能,我们还将从你的捆绑包中剔除 vue-router 的哈希模式历史 - 具体来说,如果你没有自定义你的 app/router.options.ts
(#30297)。
🐣 v4 更新
为 v4 的新默认设置推出了一些其他更改,包括只默认内联 Vue 组件的样式 (#30305)。
✅ 升级
和往常一样,我们建议的升级方式是运行:
npx nuxi@latest upgrade --force
这将刷新你的锁定文件,并确保你从 Nuxt 依赖的其他依赖项中拉取更新,特别是在 unjs 生态系统中。
完整的发布说明
非常感谢所有参与本次发布的朋友。❤️
如果你有任何反馈或问题,请毫不犹豫地告诉我们!🙏