6 月 23 日,Nuxt 3.6 正式发布,该版本带来了性能优化、完全静态的服务端组件、更好的样式内联、静态预设、增强的类型安全等许多功能改进。
SPA 加载指示器
如果网站使用ssr: false提供服务,或者在某些页面上禁用了服务端渲染,那么可能会用到新的内置 SPA 加载指示器。
现在可以在 ~/app/spa-loading-template.html 中放一个 HTML 文件,其中包含用于渲染加载屏幕的 HTML 内容,在这些页面上,加载屏幕将一直显示,直到应用完成渲染。
默认会渲染一个 Nuxt 图标动画。可以通过在 nuxt 配置文件中设置spaLoadingTemplate: false来禁用这个指示器。
性能优化
当应用渲染时,首先会运行插件,该版本对插件进行了构建时优化,这意味着它们在运行时不需要进行规范化或重新排序。
除此之外,还将错误组件的 JavaScript 包含在主入口文件中,这意味着如果用户在没有连接的情况下发生错误,仍然可以通过 ~/error.vue 处理它(这也会减少整体包大小)。
与 Nuxt 3.5.3 相比,最小的客户端包减少了约 0.7 KB。
完全静态的服务器组件
在静态页面上使用服务端组件是可行的,但是会增加应用的载荷大小。新版本将渲染的服务端组件存储为单独的文件,在导航之前进行预加载。
这依赖于新的、更丰富的 JSON 载荷格式,所以请确保没有将 experimental.renderJsonPayloads 设置为 false 来禁用它。
更好的样式内联
如果密切监控指标,并且没有关闭 experimental.inlineSSRStyles,应该能看到更多的 CSS 内联到页面中,并且外部 CSS 文件显著减少。新版本更擅长去重全局 CSS,特别是由类似 tailwind 或 unocss 等库添加的 CSS。
动画控制
为了可以对页面/布局组件有更精细的控制,例如使用GSAP 或其他库创建自定义过渡效果,现在允许在<NuxtPage>上设置pageRef,在<NuxtLayout>上设置layoutRef。这些将被传递到底层的 DOM 元素中。
自动检测“static”预设
到目前为止,运行 nuxt generate 在每个部署提供者上产生相同的输出结果,但是在 Nuxt 3.6 中,自动启用了静态提供者预设。这意味着如果将静态构建(通过 nuxt generate 生成)部署到受支持的提供者(目前是 Vercel 和 Netlify,很快还将支持 Cloudflare 和 GitHub Pages),将使用该提供者的特殊支持对页面进行预渲染。
这意味着可以配置任何不需要服务端函数的路由规则。因此,在部署不需要运行时 SSR 的站点时,可以获得最佳效果。它还解锁了在 Vercel 上使用 Nuxt Image 的功能。
增强的类型安全性
如果在 Nuxt 3.5 中使用新的 ~/server/tsconfig.json,现在对服务端特定的 #imports 和扩展提供更好的支持。因此,当从服务端目录中的 #imports 导入时,在 Nitro 中将获得正确的导入位置的 IDE 自动完成,并且不会看到诸如 useFetch 等不可用于服务端路由的 Vue 自动导入。
现在,还可以为运行时 Nitro 钩子提供类型支持。
最后,该版本还删除了更多对象具有默认 any 类型的位置。这应该可以提高 Nuxt 中许多位置的类型安全性,其中未指定的类型会回退到 any:
- RuntimeConfig
- PageMeta
- NuxtApp['payload']
- ModuleMeta
Nitro 2.5
这个版本配备了全新的 Nitro 2.5,该版本提供了流式传输的实验性支持,这也由 Nuxt 本身的一些变化启用。
模块作者的新工具
这个版本为模块作者提供了一些实用工具,以便轻松地添加类型模板并断言与另一个模块的特定版本的兼容性。此外,这个版本将最终解锁一个新的 nuxt/module-builder模式,可以提高模块作者的类型支持。
升级
建议运行以下命令进行升级:
nuxi upgrade --force
这将刷新 lock 文件,并确保从 Nuxt 依赖的其他依赖项中获取更新,特别是在 unjs 生态系统中。
Release Note:https://nuxt.com/blog/v3-6。