发布·  

Nuxt 3.15

Nuxt 3.15 发布 - 集成 Vite 6,更好的热更新和更快的性能

我们继续致力于 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 的时间。

CleanShot 2024-11-14 at 15 05 22@2x

🗺️ 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 生态系统中。

完整的发布说明

阅读 Nuxt v3.15.0 的完整发布说明。

非常感谢所有参与本次发布的朋友。❤️

如果你有任何反馈或问题,请毫不犹豫地告诉我们!🙏