你可以在这里查看演示https://nuxt-view-transitions.surge.sh以及StackBlitz 上的源代码.
你可能已经注意到,基于 Chromium 的浏览器现在已经发布了一个新的网络平台 API:View Transitions API。这是一个令人兴奋的新功能,用于原生浏览器过渡,它(除其他功能外)能够在不同页面上不相关的元素之间进行过渡。
Nuxt 现在提供了一个实验性实现,该实现将在 v3.4 发布周期中积极开发。请参阅相关 PR.
export default defineNuxtConfig({
experimental: {
viewTransition: true
}
})
✨ 有效负载增强
export default defineNuxtConfig({
experimental: {
renderJsonPayloads: true
}
})
我们已经合并了Nuxt 处理有效负载方式的重大更改(在实验性标志下)。有效负载用于在进行服务器端渲染时将数据从服务器发送到客户端,并避免在水合阶段出现重复数据获取。
启用此新选项后,现在意味着开箱即用支持各种丰富的 JS 类型:正则表达式、日期、Map 和 Set 以及 BigInt,还有 NuxtError —— 以及 Vue 特定的对象,如 ref、reactive、shallowRef 和 shallowReactive。你可以在我们的测试套件中找到一个示例
。这一切都归功于Rich-Harris/devalue#58。长期以来,Nuxt 一直使用我们自己的 devalue 分支,原因是序列化错误和其他非 POJO 对象存在问题,但我们现在已重新回到原始版本。
你甚至可以使用新的对象语法 Nuxt 插件注册自己的自定义类型
export default definePayloadPlugin(() => {
definePayloadReducer('BlinkingText', data => data === '<original-blink>' && '_')
definePayloadReviver('BlinkingText', () => '<revivified-blink>')
})
你可以阅读更多关于其工作原理的信息。此处.
注意:这仅影响 Nuxt 应用程序的有效负载,即存储在 useState 中、从 useAsyncData 返回或通过 nuxtApp.payload 手动注入的数据。它不影响通过 $fetch 或 useFetch 从 Nitro 服务器路由获取的数据,尽管这是我希望进一步探索的领域。
初步测试显示速度显著提升:对于带有大型 JSON 有效负载的极简应用程序,总服务器响应时间加快了 25%,但我强烈建议您运行自己的测试并与我们分享结果。
如前所述,我们正在将此合并到一个标志后面,以便我们可以广泛测试并收集对新方法的反馈。最重大的潜在变化是有效负载不再立即在 window.__NUXT__ 上可用。相反,我们现在需要初始化 Nuxt 应用程序来解析有效负载,因此任何访问 __NUXT__ 的代码都需要在插件中或 Nuxt 应用程序生命周期的稍后阶段运行。如果您在项目中预见或遇到问题,请随时提出问题。
我们现在支持对象语法 Nuxt 插件,以便更好地控制插件的顺序并更轻松地注册钩子。
export default defineNuxtPlugin({
name: 'my-plugin',
enforce: 'pre', // or 'post'
async setup (nuxtApp) {
// this is the equivalent of a normal functional plugin
},
hooks: {
// You can directly register Nuxt app hooks here
'app:created'() {
const nuxtApp = useNuxtApp()
//
}
}
})
将来,我们计划根据您在 Nuxt 插件中传递的元数据启用构建优化。
在您的项目中启用 Nuxt DevTools 变得更加容易:只需在您的 nuxt.config.ts 文件中设置 devtools: true 即可启用 DevTools。
export default defineNuxtConfig({
devtools: true
})
如果尚未安装,Nuxt 将提示您在本地安装。这意味着您不再需要在全局启用 Nuxt DevTools。
注意:DevTools 仍处于实验阶段并积极开发中,因此请做好偶尔出现意外行为的准备,并请直接向https://github.com/nuxt/devtools报告问题。
我们现在支持转换层中的 ~/~~/@/@@ 别名,这意味着您在层内导入时不再需要使用相对路径。
这应该意味着将“普通”Nuxt 项目用作层要容易得多,而无需专门将其编写为层。
我们现在转换 definePageMeta 和 defineNuxtComponent 的某些键,这意味着您遇到 Nuxt 实例缺失问题的次数会减少。这包括在 asyncData 和 setup 函数中,对于仍在使用 Options API 的用户,在 await 之后访问 Nuxt 实例的支持。而且在使用异步函数时,您不再需要将 middleware 和 validate 包装在 defineNuxtRouteMiddleware 中。
像往常一样,此版本将引入上游改进,包括新的Consola v3等等Nitropack v2.3.3(新的次要版本预计很快发布)。
我们还借此机会在此次次要版本中进行了一些清理。
x-nuxt-no-ssr 头部(未文档化)来强制进行 SPA 渲染。我们现在默认禁用了此行为,但您可以通过将 experimental.respectNoSSRHeader 设置为 true 来恢复它。或者,您可以在服务器上设置 event.context.nuxt.noSSR 来强制进行 SPA 渲染。#head 别名,并默认禁用了@vueuse/head 行为的 polyfill。(仍可以通过 experimental.polyfillVueUseHead 启用。)experimental.viteNode 选项。它现在可以通过 vite.devBundler 进行配置。public 键的情况下访问公共运行时配置。这是 Nuxt 2 的一个未文档化的兼容性措施,我们计划在 v3.5 中完全删除它。像往常一样,我们建议您运行以下命令进行升级
npx nuxi upgrade --force
这也将刷新你的 lockfile,并确保你拉取 Nuxt 依赖的其他依赖项(尤其是在 unjs 生态系统中)的更新。