Vue 生态最火的元框架(Nuxt 3.10)

在主流的 JS 库/框架生态中,近年来诞生了若干元框架,比如 React 的 Next 和 Remix,Vue 的 Nuxt 等。

不久前,Nuxt团队官宣 Nuxt 3.10 正式发布,截止今天已经发布3.11版本了,更新包含了若干功能和修复。其实 Nuxt 最新的语义化次版本已经到达 3.11 了,对 Vue 生态感兴趣的小伙伴可以持续关注 UP 主,我们会在近未来继续翻译 Nuxt 的官方博客,比较猴急的小伙伴也可以先传送官网查看英文原味版博客。

本期共享的是 Nuxt 3.11,整体非常接近 Nuxt 3.9,但此版本涵盖了更多功能和修复。

免责声明

本文属于是踢足球的程序员的个人理解翻译,略有删改,仅供参考。英文原味版请传送 Nuxt 3.10。

预渲染时实验性共享 asyncData

当预渲染路由时,我们最终可能会反复重新请求相同的数据。在 Nuxt 2 中,我们可以创建一个“有效负载”(payload),这有且仅有一次请求,然后就可以在每个页面中访问。当然啦,这也可以在 Nuxt 3 中手动完成。

Nuxt 3.10 之后,现在我们可以在预渲染网站时自动为您执行上述操作。我们的 useAsyncDatauseFetch 调用会在网站渲染期间进行数据去重和缓存。

// nuxt.config.ts
export defineNuxtConfig({experimental: {sharedPrerenderData: true}
})

确保数据对应的任意唯一键始终可以解析为相同的数据至关重要。举个栗子,如果您使用 useAsyncData 来请求与特定页面相关的数据,那就应该提供与该数据唯一匹配的键。useFetch 应该会自动执行此操作。

SSR 安全且可访问的唯一 ID 创建

我们现在发布了一个 useId 组合式函数,用于生成 SSR(服务端渲染)安全的唯一 ID。这允许在您的应用程序中创建更易于访问的界面。举个栗子:

<script setup>// MyForm.vueconst emailId = useId()const passwordId = useId()
</script><template><form><label :for="emailId">Email</label><input :id="emailId" name="email" type="email" /><label :for="passwordId">Password</label><input :id="passwordId" name="password" type="password" /></form>
</template>

扩展 app/router.options

模块作者现在可以注入自己的 router.options 文件。新的 pages:routerOptions 钩子允许模块作者执行添加自定义 scrollBehavior,或添加运行时路由增强等操作。

客户端的 Node 支持

我们现在(实验性)支持关键 Node 内置程序的 polyfill(功能补丁),就像我们在部署到非 Node 环境时,通过服务器上的 Nitro 所做的那样。

这意味着,在客户端代码中,我们可以直接从 Node 内置函数导入,比如支持 node: 和 Node import。但是,不会为您全局注入任何内容,避免不必要地增加包体积。您可以按需导入它们。

// some-file.ts
import { Buffer } from 'node:buffer'
import process from 'node:process'

或者提供您自己的 polyfill,比如在 Nuxt 插件中。

// plugins/node.client.ts
import { Buffer } from 'node:buffer'
import process from 'node:process'globalThis.Buffer = Buffer
globalThis.process = processexport default defineNuxtPlugin({})

对于在没有妥当浏览器支持的情况下使用库的用户而言,这应该会让它们的生活更轻松。但是,由于不必要地增加打包的风险,我们强烈建议用户尽可能选择其他备胎方案

更好的 cookie 响应性

我们现在允许您选择使用 CookieStore。如果存在浏览器支持,那会直接使用它而不是信道广播在更新 cookie 时响应式更新 useCookie 的值。

这还与一个新的组合式函数 refreshCookie 配对,这允许手动刷新 cookie 的值,比如在执行请求后。

检测反模式

在 Nuxt 3.10 中,我们还提供了一系列功能,来检测潜在的错误和性能问题。

  • 如果在服务器上使用 setInterval,我们现在会直接报错。
  • 如果数据请求的组合式函数使用不当,比如在插件或 setup 上下文之外,我们会发出警告(当且仅当开发时)。
  • 如果您不使用 <NuxtPage />,但启用了 vue-router 集成,我们会发出警告(当且仅当开发时)。<RouterView /> 不应该单独使用。

细粒度视图过渡支持

现在可以使用 definePageMeta 控制每个页面的视图过渡(view transition)支持。

我们首先需要启用实验性视图转换支持:

// nuxt.config.ts
export default defineNuxtConfig({experimental: {viewTransition: true},app: {// 视图过渡默认会启动,您可以按需全局禁用它们viewTransition: false}
})

您可以细粒度地选用/启用:

<script setup lang="ts">// pages/index.vuedefinePageMeta({viewTransition: false})
</script>

最后,如果用户的浏览器匹配 prefers-reduced-motion: reduce,Nuxt 则不会应用视图过渡。您可以设置 viewTransition: 'always',这取决于您对用户偏好的尊重。

构建时路由元数据

现在可以在构建时访问 definePageMeta 中定义的路由元数据,这允许模块和钩子修改和更改这些值。

// nuxt.config.ts
export default defineNuxtConfig({experimental: {scanPageMeta: true}
})

请沉浸式体验一下,并让我们知道它对您有何作用。我们期望提高性能,并在未来版本中默认启动此功能,这样 @nuxtjs/i18n 等模块可以提供与 definePageMeta 中设置的路由选项更深入的集成。

bundler 模块解析

我们现在选择使用 TS bundler 解析,这应该更类似于我们解决 Nuxt 项目中模块的子路径导入的实际方式。

Vue 和 Vite 推荐使用“Bundler”模块解析,但不幸的是,仍然有许多包的 package.json 中没有正确的入口。

作为其中的一部分,我们在整个生态系统中开放了 85 个 PR(拉取请求)来测试默认设置的切换,并发现并修复了某些问题。

如果您需要关闭此行为,您可以这样做。但是,请考虑在库或模块的存储库中提出 issue(请随时在其中标记我),以便可以从根源搞定此问题。

// nuxt.config.ts
export default defineNuxtConfig({future: {typescriptBundlerResolution: false}
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573749.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云企业邮箱API与其他API服务的不同点?

阿里云企业邮箱API如何使用&#xff1f;如何配置邮箱API权限&#xff1f; 在众多API服务中&#xff0c;阿里云企业邮箱API以其独特的功能和优势&#xff0c;为企业邮箱管理带来了全新的体验。那么&#xff0c;阿里云企业邮箱API与其他API服务究竟有哪些不同点呢&#xff1f;Ao…

SD卡备份和烧录ubuntu20.04镜像

设备及系统&#xff1a;nuc幻影峡谷工控机&#xff0c;ubuntu20.04&#xff0c;树莓派4B&#xff0c;SD卡读卡器 一、确定SD卡设备号的两种方法 方法1&#xff1a; 将有ubuntu镜像的SD卡插入读卡器&#xff0c;再将读卡器插入电脑主机&#xff0c;在 工具 中打开 磁盘&#…

科学高效备考2024年汉字小达人:历年真题详细解析-古诗文专题10

距离2024年第11届汉字小达人比赛还有七个多月的时间&#xff0c;如何利用这段时间有条不紊地备考呢&#xff1f;我的建议是两手准备&#xff1a;①把小学1-5年级的语文课本上的知识点熟悉&#xff0c;重点是字、词、成语、古诗。阅读理解不需要。②把历年真题刷刷熟&#xff0c…

flink on yarn-per job源码解析、flink on k8s介绍

Flink 架构概览–JobManager JobManager的功能主要有: 将 JobGraph 转换成 Execution Graph,最终将 Execution Graph 拿来运行Scheduler 组件负责 Task 的调度Checkpoint Coordinator 组件负责协调整个任务的 Checkpoint,包括 Checkpoint 的开始和完成通过 Actor System 与 …

AJAX~

概念:AJAX(Asynchronous JavaScript And XML):异步的JavaScript和XML AJAX作用&#xff1a; 1.与服务器进行数据交换:通过AJAX可以给服务器发送请求&#xff0c;并获取服务器响应的数据 使用了AJAX和服务器进行通信&#xff0c;就可以使用HTMLAJAX来替换JSP页面了 2&#xf…

【氮化镓】位错对氮化镓(GaN)电子能量损失谱(EEL)的影响

本文献《Influence of dislocations on electron energy-loss spectra in gallium nitride》由C. J. Fall等人撰写&#xff0c;发表于2002年。研究团队通过第一性原理计算&#xff0c;探讨了位错对氮化镓&#xff08;GaN&#xff09;电子能量损失谱&#xff08;EEL&#xff09;…

【教程】iOS如何抓取HTTP和HTTPS数据包经验分享

&#x1f4f1; 在日常的App开发和研发调研中&#xff0c;对各类App进行深入的研究分析时&#xff0c;我们需要借助专业的抓包应用来协助工作。本文将介绍如何使用iOS手机抓包工具来获取HTTP和HTTPS数据包&#xff0c;并推荐一款实用的抓包应用——克魔助手&#xff0c;希望能够…

【正点原子FreeRTOS学习笔记】————(14)事件标志组

这里写目录标题 一、事件标志组简介&#xff08;了解&#xff09;二、事件标志组相关API函数介绍&#xff08;熟悉&#xff09;三、事件标志组实验&#xff08;掌握&#xff09; 一、事件标志组简介&#xff08;了解&#xff09; 事件标志位&#xff1a;用一个位&#xff0c;来…

【C++】搜索二叉树

1. 二叉搜索树 a. 二叉搜索树的概念 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是具有以下性质的二叉树: 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不为空&#xff0c;则右子树上所有节点的值都大于根…

专题二_滑动窗口(1)

目录 209. 长度最小的子数组 解析 题解 3. 无重复字符的最长子串 解析 题解 1004. 最大连续1的个数 III 解析 题解 209. 长度最小的子数组 209. 长度最小的子数组 - 力扣&#xff08;LeetCode&#xff09; 解析 题解 class Solution { public:int minSubArrayLen(int…

DREAM: A Dynamic Scheduler for Dynamic Real-time Multi-model ML Workloads——论文泛读

ASPLOS 2024 Paper 论文阅读笔记整理 问题 新兴的实时多模型ML&#xff08;RTMM&#xff09;工作负载&#xff0c;如AR/VR和无人机控制&#xff0c;涉及各种粒度的动态行为&#xff1a;任务、模型和模型中的层。这种动态行为给ML系统中的系统软件带来了新的挑战&#xff0c;与…

大话设计模式之装饰模式

装饰模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许向现有对象动态地添加新功能&#xff0c;同时又不改变其结构。装饰模式通过将对象放入包装器中来实现&#xff0c;在包装器中可以动态地添加功能。 在装饰模式中&#xff0c;通常会有…