[{"data":1,"prerenderedAt":4327},["ShallowReactive",2],{"docs-all-flat":3,"docs-\u002Fdocs\u002Fgetting-started\u002Fupgrade":1018},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216,220,224,228,232,236,240,244,248,252,256,260,264,268,272,276,280,284,288,292,296,300,304,308,312,316,320,324,328,332,336,340,344,348,352,355,359,363,367,371,375,379,383,387,391,395,399,403,407,411,415,419,423,427,431,435,439,443,447,451,455,459,463,467,471,475,479,483,487,491,495,499,503,507,511,515,519,523,527,531,535,539,543,547,551,555,559,563,567,571,575,579,583,587,591,595,599,603,607,611,615,619,623,627,631,635,639,643,647,651,655,659,663,667,671,675,679,683,687,691,695,699,703,707,711,715,719,723,727,731,735,739,743,747,751,755,759,763,767,770,774,778,782,786,790,794,798,802,806,809,813,817,821,825,829,833,837,841,845,849,852,855,859,863,867,871,874,877,881,884,888,892,895,898,901,904,907,911,915,918,922,926,930,934,938,942,946,950,954,958,962,966,970,974,978,982,986,990,994,998,1002,1006,1010,1014],{"path":5,"title":6,"description":7},"\u002Fdocs\u002Fgetting-started\u002Fintroduction","介绍","Nuxt 的目标是提供直观且高性能的 Web 开发体验，并始终将优秀的开发者体验（Developer Experience）放在心上。",{"path":9,"title":10,"description":11},"\u002Fdocs\u002Fgetting-started\u002Finstallation","安装","通过在线 starter 快速上手 Nuxt，或在本地使用终端从零开始。",{"path":13,"title":14,"description":15},"\u002Fdocs\u002Fgetting-started\u002Fconfiguration","配置","Nuxt 提供了合理的默认配置，让你高效开发。",{"path":17,"title":18,"description":19},"\u002Fdocs\u002Fgetting-started\u002Fviews","视图","Nuxt 提供了多个组件层来实现应用的用户界面。",{"path":21,"title":22,"description":23},"\u002Fdocs\u002Fgetting-started\u002Fassets","资源","Nuxt 为你的资源提供了两种处理方式。",{"path":25,"title":26,"description":27},"\u002Fdocs\u002Fgetting-started\u002Fstyling","样式","了解如何为你的 Nuxt 应用添加样式。",{"path":29,"title":30,"description":31},"\u002Fdocs\u002Fgetting-started\u002Frouting","路由","Nuxt 的文件系统路由会为 pages\u002F 目录中的每个文件创建一条路由。",{"path":33,"title":34,"description":35},"\u002Fdocs\u002Fgetting-started\u002Fseo-meta","SEO 与 Meta","借助强大的 head 配置、composables 和组件，改善你的 Nuxt 应用的 SEO。",{"path":37,"title":38,"description":39},"\u002Fdocs\u002Fgetting-started\u002Ftransitions","过渡","使用 Vue 或浏览器原生的 View Transitions，在页面和布局之间应用过渡效果。",{"path":41,"title":42,"description":43},"\u002Fdocs\u002Fgetting-started\u002Fdata-fetching","数据获取","Nuxt 提供了用于处理应用内数据获取的 composables。",{"path":45,"title":46,"description":47},"\u002Fdocs\u002Fgetting-started\u002Fstate-management","状态管理","Nuxt 提供了强大的状态管理库和 useState composable，用于创建响应式且对 SSR 友好的共享状态。",{"path":49,"title":50,"description":51},"\u002Fdocs\u002Fgetting-started\u002Ferror-handling","错误处理","了解如何在 Nuxt 中捕获和处理错误。",{"path":53,"title":54,"description":55},"\u002Fdocs\u002Fgetting-started\u002Fserver","Server","利用 Nuxt 的服务端框架构建全栈应用。你可以从数据库或其他服务端获取数据、创建 API，甚至生成像站点地图或 RSS 这样的静态服务端内容——全部来自同一个代码库。",{"path":57,"title":58,"description":59},"\u002Fdocs\u002Fgetting-started\u002Flayers","Layers","Nuxt 提供了一套强大的系统，允许你扩展默认文件、配置以及更多内容。",{"path":61,"title":62,"description":63},"\u002Fdocs\u002Fgetting-started\u002Fprerendering","Prerendering","Nuxt 允许在构建时静态渲染某些页面，以改善特定的性能或 SEO 指标。",{"path":65,"title":66,"description":67},"\u002Fdocs\u002Fgetting-started\u002Fdeployment","Deployment","了解如何将你的 Nuxt 应用部署到任何托管提供商。",{"path":69,"title":70,"description":71},"\u002Fdocs\u002Fgetting-started\u002Ftesting","Testing","如何测试你的 Nuxt 应用。",{"path":73,"title":74,"description":75},"\u002Fdocs\u002Fgetting-started\u002Fupgrade","Upgrade Guide","了解如何升级到最新的 Nuxt 版本。",{"path":77,"title":78,"description":79},"\u002Fdocs\u002Fdirectory-structure\u002Fnuxt",".nuxt","Nuxt 在开发阶段使用 .nuxt\u002F 目录来生成你的 Vue 应用。",{"path":81,"title":82,"description":83},"\u002Fdocs\u002Fdirectory-structure\u002Foutput",".output","Nuxt 在为生产环境构建应用时创建 .output\u002F 目录。",{"path":85,"title":86,"description":87},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fassets","assets","assets\u002F 目录用于添加所有将由构建工具处理的网站资源。",{"path":89,"title":90,"description":91},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fcomponents","components","components\u002F 目录用于存放你所有的 Vue 组件。",{"path":93,"title":94,"description":95},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fcomposables","composables","使用 composables\u002F 目录将你的 Vue 组合式函数自动导入到应用中。",{"path":97,"title":98,"description":99},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Flayouts","layouts","Nuxt 提供了一个布局框架，用于将通用的 UI 模式提取为可复用的布局。",{"path":101,"title":102,"description":103},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fmiddleware","middleware","Nuxt 提供中间件，用于在导航到特定路由前运行代码。",{"path":105,"title":106,"description":107},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fpages","pages","Nuxt 提供基于文件的路由，用于在 Web 应用中创建路由。",{"path":109,"title":110,"description":111},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fplugins","plugins","Nuxt 拥有一个插件系统，用于在创建 Vue 应用时使用 Vue 插件等。",{"path":113,"title":114,"description":115},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Futils","utils","使用 utils\u002F 目录在你的应用中自动导入工具函数。",{"path":117,"title":118,"description":119},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fapp","app.vue","app.vue 文件是你 Nuxt 应用的主组件。",{"path":121,"title":122,"description":123},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fapp-config","app.config.ts","使用 App Config 文件在应用内部暴露响应式配置。",{"path":125,"title":126,"description":127},"\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Ferror","error.vue","error.vue 文件是你 Nuxt 应用中的错误页面。",{"path":129,"title":130,"description":131},"\u002Fdocs\u002Fdirectory-structure\u002Fcontent","content","使用 content\u002F 目录为你的应用创建一个基于文件的 CMS。",{"path":133,"title":134,"description":135},"\u002Fdocs\u002Fdirectory-structure\u002Flayers","layers","使用 layers\u002F 目录在你的应用中组织和自动注册本地 layers。",{"path":137,"title":138,"description":139},"\u002Fdocs\u002Fdirectory-structure\u002Fmodules","modules","使用 modules\u002F 目录在你的应用中自动注册本地模块。",{"path":141,"title":142,"description":143},"\u002Fdocs\u002Fdirectory-structure\u002Fnode_modules","node_modules","包管理器将项目的依赖存储在 node_modules\u002F 目录中。",{"path":145,"title":146,"description":147},"\u002Fdocs\u002Fdirectory-structure\u002Fpublic","public","public\u002F 目录用于提供网站的静态资源。",{"path":149,"title":150,"description":151},"\u002Fdocs\u002Fdirectory-structure\u002Fserver","server","server\u002F 目录用于为你的应用注册 API 和服务端处理器。",{"path":153,"title":154,"description":155},"\u002Fdocs\u002Fdirectory-structure\u002Fshared","shared","使用 shared\u002F 目录在 Vue 应用和 Nitro 服务端之间共享功能。",{"path":157,"title":158,"description":159},"\u002Fdocs\u002Fdirectory-structure\u002Fenv",".env",".env 文件用于指定构建\u002F开发时的环境变量。",{"path":161,"title":162,"description":163},"\u002Fdocs\u002Fdirectory-structure\u002Fgitignore",".gitignore",".gitignore 文件用于指定 git 应当忽略的、有意不跟踪的文件。",{"path":165,"title":166,"description":167},"\u002Fdocs\u002Fdirectory-structure\u002Fnuxtignore",".nuxtignore",".nuxtignore 文件用于让 Nuxt 在构建阶段忽略项目根目录中的文件。",{"path":169,"title":170,"description":171},"\u002Fdocs\u002Fdirectory-structure\u002Fnuxtrc",".nuxtrc",".nuxtrc 文件允许你用扁平语法定义 Nuxt 配置。",{"path":173,"title":174,"description":175},"\u002Fdocs\u002Fdirectory-structure\u002Fnuxt-config","nuxt.config.ts","只需要一个 nuxt.config 文件，即可轻松配置 Nuxt。",{"path":177,"title":178,"description":179},"\u002Fdocs\u002Fdirectory-structure\u002Fpackage","package.json","package.json 文件包含你应用的所有依赖和脚本。",{"path":181,"title":182,"description":183},"\u002Fdocs\u002Fdirectory-structure\u002Ftsconfig","tsconfig.json","了解 Nuxt 如何在项目的不同部分管理 TypeScript 配置。",{"path":185,"title":186,"description":187},"\u002Fdocs\u002Fdirectory-structure","Nuxt 目录结构","了解 Nuxt 应用的目录结构以及如何使用它。",{"path":189,"title":190,"description":191},"\u002Fdocs\u002Fguide","Nuxt 指南","通过深入的指南了解 Nuxt 的工作原理。",{"path":193,"title":194,"description":195},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Frendering","渲染模式","了解 Nuxt 中可用的不同渲染模式。",{"path":197,"title":198,"description":199},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fvuejs-development","Vue.js 开发","Nuxt 使用 Vue.js，并添加了组件自动导入、基于文件的路由以及支持 SSR 的组合式函数等特性。",{"path":201,"title":202,"description":203},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fnuxt-lifecycle","Nuxt 生命周期","理解 Nuxt 应用的生命周期，可以帮助你更深入地了解框架是如何运作的，尤其是在服务端渲染和客户端渲染两方面。",{"path":205,"title":206,"description":207},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fauto-imports","自动导入","Nuxt 会自动导入组件、组合式函数、辅助函数和 Vue API。",{"path":209,"title":210,"description":211},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fserver-engine","服务端引擎","Nuxt 由一个全新的服务端引擎驱动：Nitro。",{"path":213,"title":214,"description":215},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fmodules","模块","Nuxt 提供了一个模块系统来扩展框架核心并简化集成。",{"path":217,"title":218,"description":219},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fesm","ES 模块","Nuxt 使用原生的 ES 模块。",{"path":221,"title":222,"description":223},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Ftypescript","TypeScript","Nuxt 完全类型化，并提供了有用的快捷方式，确保你在编码时能获取准确的类型信息。",{"path":225,"title":226,"description":227},"\u002Fdocs\u002Fguide\u002Fconcepts\u002Fcode-style","代码风格","Nuxt 开箱即用地支持 ESLint",{"path":229,"title":230,"description":231},"\u002Fdocs\u002Fguide\u002Fbest-practices\u002Fdevcontainers","Dev Containers","在开发容器中设置或打开 Nuxt 项目，以获得一致开发环境。",{"path":233,"title":234,"description":235},"\u002Fdocs\u002Fguide\u002Fbest-practices\u002Fhydration","Nuxt and Hydration","为什么修复水合问题很重要",{"path":237,"title":238,"description":239},"\u002Fdocs\u002Fguide\u002Fbest-practices\u002Fperformance","Nuxt performance","提升 Nuxt 应用性能的最佳实践。",{"path":241,"title":242,"description":243},"\u002Fdocs\u002Fguide\u002Fbest-practices\u002Fplugins","Nuxt Plugins","使用 Nuxt 插件时的最佳实践。",{"path":245,"title":246,"description":247},"\u002Fdocs\u002Fguide\u002Fai\u002Fmcp","Nuxt MCP Server","借助 Model Context Protocol 支持，在你的 AI 助手中使用 Nuxt 文档。",{"path":249,"title":250,"description":251},"\u002Fdocs\u002Fguide\u002Fai\u002Fllms-txt","Nuxt LLMs.txt","如何让 Cursor、Windsurf、GitHub Copilot、ChatGPT 和 Claude 等 AI 工具理解 Nuxt 的概念、API 和最佳实践。",{"path":253,"title":254,"description":255},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fgetting-started","创建你的第一个模块","学习如何使用官方启动模板创建你的第一个 Nuxt 模块。",{"path":257,"title":258,"description":259},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fmodule-anatomy","理解模块结构","学习 Nuxt 模块是如何构成的，以及如何定义它们。",{"path":261,"title":262,"description":263},"\u002Fdocs\u002Fguide\u002Fmodules\u002Frecipes-basics","添加插件、组件等","学习如何从你的模块注入插件、组件、组合式函数和服务端路由。",{"path":265,"title":266,"description":267},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fmodule-dependencies","模块依赖","声明对其它模块的依赖，并带有版本约束和配置合并。",{"path":269,"title":270,"description":271},"\u002Fdocs\u002Fguide\u002Fmodules\u002Frecipes-advanced","使用钩子与扩展类型","在你的模块中掌握生命周期钩子、虚拟文件和 TypeScript 声明。",{"path":273,"title":274,"description":275},"\u002Fdocs\u002Fguide\u002Fmodules\u002Ftesting","测试你的模块","学习如何对你的 Nuxt 模块进行单元、集成和 E2E 测试。",{"path":277,"title":278,"description":279},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fbest-practices","遵循最佳实践","使用这些指南构建高性能且可维护的 Nuxt 模块。",{"path":281,"title":282,"description":283},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fecosystem","发布与分享你的模块","加入 Nuxt 模块生态，并将你的模块发布到 npm。",{"path":285,"title":286,"description":287},"\u002Fdocs\u002Fguide\u002Fmodules","Module Author Guide","学习如何创建 Nuxt 模块，以集成、增强或扩展任意 Nuxt 应用。",{"path":289,"title":290,"description":291},"\u002Fdocs\u002Fguide\u002Frecipes\u002Fcustom-routing","自定义路由","在 Nuxt 中，你的路由由 pages 目录内文件的结构定义。不过，由于底层使用了 vue-router，Nuxt 提供了几种在你的项目中添加自定义路由的方式。",{"path":293,"title":294,"description":295},"\u002Fdocs\u002Fguide\u002Frecipes\u002Fvite-plugin","在 Nuxt 中使用 Vite 插件","学习如何将 Vite 插件集成到你的 Nuxt 项目中。",{"path":297,"title":298,"description":299},"\u002Fdocs\u002Fguide\u002Frecipes\u002Fcustom-usefetch","Nuxt 中的自定义 useFetch","如何在 Nuxt 中创建用于调用你外部 API 的自定义 fetcher。",{"path":301,"title":302,"description":303},"\u002Fdocs\u002Fguide\u002Frecipes\u002Fsessions-and-authentication","会话与鉴权","鉴权是 Web 应用中极其常见的需求。本配方将向你展示如何在你的 Nuxt 应用中实现基本的用户注册与鉴权。",{"path":305,"title":306,"description":307},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fevents","创建自定义事件","Nuxt 提供了一个由 hookable 驱动的强大事件系统。",{"path":309,"title":310,"description":311},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fexperimental-features","实验性特性","启用 Nuxt 实验性特性以解锁新的可能性。",{"path":313,"title":314,"description":315},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Ffeatures","特性开关","启用或禁用可选的 Nuxt 特性，以解锁新的可能性。",{"path":317,"title":318,"description":319},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Finternals","Nuxt 是如何工作的？","Nuxt 是一个极简但高度可定制的框架，用于构建 Web 应用。",{"path":321,"title":322,"description":323},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fruntime-config","运行时配置","Nuxt 提供了一套运行时配置 API，以在你的应用内暴露配置和密钥。",{"path":325,"title":326,"description":327},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fnightly-release-channel","Nightly 发布通道","nightly 发布通道允许使用直接从仓库最新提交构建的 Nuxt。",{"path":329,"title":330,"description":331},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fhooks","生命周期钩子","Nuxt 提供了一个强大的钩子系统，可使用钩子扩展几乎每个方面。",{"path":333,"title":334,"description":335},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fkit","Nuxt Kit","@nuxt\u002Fkit 提供了面向模块作者的功能。",{"path":337,"title":338,"description":339},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fnuxt-app","NuxtApp","在 Nuxt 中，你可以在组合式函数、组件和插件中访问运行时应用上下文。",{"path":341,"title":342,"description":343},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Flayers","编写 Nuxt Layers","Nuxt 提供了一个强大的系统，允许你扩展默认文件、配置等等。",{"path":345,"title":346,"description":347},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fbuilders","创建 Builder","了解 Nuxt builder 是如何工作的，以及如何编写你自己的 builder。",{"path":349,"title":350,"description":351},"\u002Fdocs\u002Fguide\u002Fgoing-further\u002Fdebugging","调试","在 Nuxt 中，你可以直接在浏览器中以及你的 IDE 里开始调试你的应用。",{"path":353,"title":354,"description":354},"\u002Fdocs\u002Fguide\u002Fgoing-further","",{"path":356,"title":357,"description":358},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fclient-only","\u003CClientOnly>","使用 \u003CClientOnly> 组件仅在客户端渲染组件。",{"path":360,"title":361,"description":362},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fdev-only","\u003CDevOnly>","使用 \u003CDevOnly> 组件仅在开发期间渲染组件。",{"path":364,"title":365,"description":366},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-client-fallback","\u003CNuxtClientFallback>","Nuxt 提供了 \u003CNuxtClientFallback> 组件，当其任意子组件在 SSR 中触发错误时，在客户端渲染其内容",{"path":368,"title":369,"description":370},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-picture","\u003CNuxtPicture>","Nuxt 提供了 \u003CNuxtPicture> 组件来处理自动图像优化。",{"path":372,"title":373,"description":374},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fteleports","\u003CTeleport>","\u003CTeleport> 组件将组件传送到 DOM 中的另一个位置。",{"path":376,"title":377,"description":378},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-route-announcer","\u003CNuxtRouteAnnouncer>","\u003CNuxtRouteAnnouncer> 组件添加一个带有页面标题的隐藏元素，用于向辅助技术播报路由变化。",{"path":380,"title":381,"description":382},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-time","\u003CNuxtTime>","\u003CNuxtTime> 组件以本地化友好的格式显示时间，并保持服务端-客户端一致。",{"path":384,"title":385,"description":386},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-announcer","\u003CNuxtAnnouncer>","\u003CNuxtAnnouncer> 组件添加一个隐藏元素，用于向辅助技术播报动态内容变化。",{"path":388,"title":389,"description":390},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-page","\u003CNuxtPage>","\u003CNuxtPage> 组件用于显示位于 pages\u002F 目录中的页面。",{"path":392,"title":393,"description":394},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-layout","\u003CNuxtLayout>","Nuxt 提供了 \u003CNuxtLayout> 组件，用于在页面和错误页面上显示布局。",{"path":396,"title":397,"description":398},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-link","\u003CNuxtLink>","Nuxt 提供了 \u003CNuxtLink> 组件来处理应用内的各类链接。",{"path":400,"title":401,"description":402},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-loading-indicator","\u003CNuxtLoadingIndicator>","在页面导航之间显示进度条。",{"path":404,"title":405,"description":406},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-error-boundary","\u003CNuxtErrorBoundary>","\u003CNuxtErrorBoundary> 组件处理其默认插槽中发生的客户端错误。",{"path":408,"title":409,"description":410},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-welcome","\u003CNuxtWelcome>","\u003CNuxtWelcome> 组件用于欢迎通过启动模板创建的新项目的用户。",{"path":412,"title":413,"description":414},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-island","\u003CNuxtIsland>","Nuxt 提供了 \u003CNuxtIsland> 组件，用于渲染无客户端 JS 的非交互式组件。",{"path":416,"title":417,"description":418},"\u002Fdocs\u002Fapi\u002Fcomponents\u002Fnuxt-img","\u003CNuxtImg>","Nuxt 提供了 \u003CNuxtImg> 组件来处理自动图像优化。",{"path":420,"title":421,"description":422},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fcreate-use-async-data","createUseAsyncData","一个工厂函数，用于创建带有预定义默认选项的自定义 useAsyncData 组合式函数。",{"path":424,"title":425,"description":426},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fcreate-use-fetch","createUseFetch","一个工厂函数，用于创建带有预定义默认选项的自定义 useFetch 组合式函数。",{"path":428,"title":429,"description":430},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fon-prehydrate","onPrehydrate","使用 onPrehydrate 在 Nuxt 对页面进行 hydration 之前的客户端立即运行回调。",{"path":432,"title":433,"description":434},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-announcer","useAnnouncer","一个用于向屏幕阅读器播报消息的组合式函数。",{"path":436,"title":437,"description":438},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-app-config","useAppConfig","访问在项目中定义的可响应 app config。",{"path":440,"title":441,"description":442},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-async-data","useAsyncData","useAsyncData 以 SSR 友好的方式提供对异步解析数据的访问。",{"path":444,"title":445,"description":446},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-cookie","useCookie","useCookie 是一个 SSR 友好的组合式函数，用于读写 cookie。",{"path":448,"title":449,"description":450},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-error","useError","useError 组合式函数返回正在被处理的全局 Nuxt 错误。",{"path":452,"title":453,"description":454},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-fetch","useFetch","使用 SSR 友好的组合式函数从 API 端点获取数据。",{"path":456,"title":457,"description":458},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-head","useHead","useHead 用于自定义 Nuxt 应用各个页面的 head 属性。",{"path":460,"title":461,"description":462},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-head-safe","useHeadSafe","处理用户输入时提供 head 数据的推荐方式。",{"path":464,"title":465,"description":466},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-hydration","useHydration","允许完全控制 hydration 周期，以便从服务端设置和接收数据。",{"path":468,"title":469,"description":470},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-layout","useLayout","useLayout 返回为当前路由解析出的布局。",{"path":472,"title":473,"description":474},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-lazy-async-data","useLazyAsyncData","该组合式函数包装 useAsyncData，会在 handler 解析之前立即触发导航。",{"path":476,"title":477,"description":478},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-lazy-fetch","useLazyFetch","该组合式函数是对 useFetch 的封装，会在 handler 解析之前立即触发导航。",{"path":480,"title":481,"description":482},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-loading-indicator","useLoadingIndicator","该组合式函数让你访问应用页面的加载状态。",{"path":484,"title":485,"description":486},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-nuxt-app","useNuxtApp","访问 Nuxt 应用的共享运行时上下文。",{"path":488,"title":489,"description":490},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-nuxt-data","useNuxtData","访问数据获取组合式函数的当前缓存值。",{"path":492,"title":493,"description":494},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-preview-mode","usePreviewMode","使用 usePreviewMode 检查并控制 Nuxt 的预览模式",{"path":496,"title":497,"description":498},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-request-event","useRequestEvent","使用 useRequestEvent 组合式函数访问传入的请求事件。",{"path":500,"title":501,"description":502},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-request-fetch","useRequestFetch","使用 useRequestFetch 组合式函数为服务端 fetch 请求转发请求上下文和请求头。",{"path":504,"title":505,"description":506},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-request-header","useRequestHeader","使用 useRequestHeader 访问某个特定的传入请求头。",{"path":508,"title":509,"description":510},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-request-headers","useRequestHeaders","使用 useRequestHeaders 访问传入的请求头。",{"path":512,"title":513,"description":514},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-request-url","useRequestURL","使用 useRequestURL 组合式函数访问传入的请求 URL。",{"path":516,"title":517,"description":518},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-response-header","useResponseHeader","使用 useResponseHeader 设置服务端响应头。",{"path":520,"title":521,"description":522},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-route","useRoute","useRoute 组合式函数返回当前路由。",{"path":524,"title":525,"description":526},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-route-announcer","useRouteAnnouncer","该组合式函数监视页面标题变化，并相应地更新播报消息。",{"path":528,"title":529,"description":530},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-router","useRouter","useRouter 组合式函数返回 router 实例。",{"path":532,"title":533,"description":534},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-runtime-config","useRuntimeConfig","使用 useRuntimeConfig 组合式函数访问运行时配置变量。",{"path":536,"title":537,"description":538},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-runtime-hook","useRuntimeHook","在 Nuxt 应用中注册一个运行时钩子，并确保在作用域销毁时被正确清理。",{"path":540,"title":541,"description":542},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-seo-meta","useSeoMeta","useSeoMeta 组合式函数让你可以将站点的 SEO meta 标签定义为一个扁平对象，并提供完整的 TypeScript 支持。",{"path":544,"title":545,"description":546},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-server-seo-meta","useServerSeoMeta","useServerSeoMeta 组合式函数让你可以将站点的 SEO meta 标签定义为一个扁平对象，并提供完整的 TypeScript 支持。",{"path":548,"title":549,"description":550},"\u002Fdocs\u002Fapi\u002Fcomposables\u002Fuse-state","useState","useState 组合式函数创建一个可响应的、SSR 友好的共享状态。",{"path":552,"title":553,"description":554},"\u002Fdocs\u002Fapi\u002Futils\u002Fdollarfetch","$fetch","Nuxt 使用 ofetch 全局暴露了 $fetch 辅助函数，用于发起 HTTP 请求。",{"path":556,"title":557,"description":558},"\u002Fdocs\u002Fapi\u002Futils\u002Fabort-navigation","abortNavigation","abortNavigation 是一个辅助函数，用于阻止导航的发生，并在设置了参数时抛出错误。",{"path":560,"title":561,"description":562},"\u002Fdocs\u002Fapi\u002Futils\u002Fadd-route-middleware","addRouteMiddleware","addRouteMiddleware() 是一个在你的应用中动态添加中间件的辅助函数。",{"path":564,"title":565,"description":566},"\u002Fdocs\u002Fapi\u002Futils\u002Fcall-once","callOnce","在 SSR 或 CSR 期间只运行一次给定的函数或代码块。",{"path":568,"title":569,"description":570},"\u002Fdocs\u002Fapi\u002Futils\u002Fclear-error","clearError","clearError 组合式函数清除所有已处理的错误。",{"path":572,"title":573,"description":574},"\u002Fdocs\u002Fapi\u002Futils\u002Fclear-nuxt-data","clearNuxtData","删除 useAsyncData 和 useFetch 的缓存数据、错误状态和挂起的 promise。",{"path":576,"title":577,"description":578},"\u002Fdocs\u002Fapi\u002Futils\u002Fclear-nuxt-state","clearNuxtState","删除 useState 的缓存状态。",{"path":580,"title":581,"description":582},"\u002Fdocs\u002Fapi\u002Futils\u002Fcreate-error","createError","创建一个带有附加元数据的错误对象。",{"path":584,"title":585,"description":586},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-lazy-hydration-component","defineLazyHydrationComponent","使用特定策略定义一个懒加载 hydration 组件。",{"path":588,"title":589,"description":590},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-nuxt-component","defineNuxtComponent","defineNuxtComponent() 是一个用于使用 Options API 定义类型安全组件的辅助函数。",{"path":592,"title":593,"description":594},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-nuxt-plugin","defineNuxtPlugin","defineNuxtPlugin() 是一个用于创建 Nuxt 插件的辅助函数。",{"path":596,"title":597,"description":598},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-nuxt-route-middleware","defineNuxtRouteMiddleware","使用 defineNuxtRouteMiddleware 辅助函数创建命名路由中间件。",{"path":600,"title":601,"description":602},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-page-meta","definePageMeta","为你的页面组件定义元数据。",{"path":604,"title":605,"description":606},"\u002Fdocs\u002Fapi\u002Futils\u002Fdefine-route-rules","defineRouteRules","在页面层面定义用于混合渲染的路由规则。",{"path":608,"title":609,"description":610},"\u002Fdocs\u002Fapi\u002Futils\u002Fnavigate-to","navigateTo","navigateTo 是一个用于以编程方式导航用户的辅助函数。",{"path":612,"title":613,"description":614},"\u002Fdocs\u002Fapi\u002Futils\u002Fon-before-route-leave","onBeforeRouteLeave","onBeforeRouteLeave 组合式函数允许在组件内部注册一个路由守卫。",{"path":616,"title":617,"description":618},"\u002Fdocs\u002Fapi\u002Futils\u002Fon-before-route-update","onBeforeRouteUpdate","onBeforeRouteUpdate 组合式函数允许在组件内部注册一个路由守卫。",{"path":620,"title":621,"description":622},"\u002Fdocs\u002Fapi\u002Futils\u002Fon-nuxt-ready","onNuxtReady","onNuxtReady 组合式函数允许在你的应用完成初始化之后运行一个回调。",{"path":624,"title":625,"description":626},"\u002Fdocs\u002Fapi\u002Futils\u002Fprefetch-components","prefetchComponents","Nuxt 提供了用于在预取组件方面给予你控制的工具。",{"path":628,"title":629,"description":630},"\u002Fdocs\u002Fapi\u002Futils\u002Fpreload-components","preloadComponents","Nuxt 提供了用于在预加载组件方面给予你控制的工具。",{"path":632,"title":633,"description":634},"\u002Fdocs\u002Fapi\u002Futils\u002Fpreload-route-components","preloadRouteComponents","preloadRouteComponents 允许你手动预加载 Nuxt 应用中的单个页面。",{"path":636,"title":637,"description":638},"\u002Fdocs\u002Fapi\u002Futils\u002Fprerender-routes","prerenderRoutes","prerenderRoutes 向 Nitro 暗示预渲染一个额外的路由。",{"path":640,"title":641,"description":642},"\u002Fdocs\u002Fapi\u002Futils\u002Frefresh-cookie","refreshCookie","当 cookie 发生变化时，手动刷新 useCookie 的值",{"path":644,"title":645,"description":646},"\u002Fdocs\u002Fapi\u002Futils\u002Frefresh-nuxt-data","refreshNuxtData","刷新 Nuxt 中所有或特定的 asyncData 实例",{"path":648,"title":649,"description":650},"\u002Fdocs\u002Fapi\u002Futils\u002Freload-nuxt-app","reloadNuxtApp","reloadNuxtApp 会对页面执行一次硬刷新。",{"path":652,"title":653,"description":654},"\u002Fdocs\u002Fapi\u002Futils\u002Fset-page-layout","setPageLayout","setPageLayout 允许你动态更改页面的布局。",{"path":656,"title":657,"description":658},"\u002Fdocs\u002Fapi\u002Futils\u002Fset-response-status","setResponseStatus","setResponseStatus 设置响应的状态码（以及可选的 statusText）。",{"path":660,"title":661,"description":662},"\u002Fdocs\u002Fapi\u002Futils\u002Fshow-error","showError","Nuxt 提供了一种快速且简单的方式，在需要的时候显示全屏错误页。",{"path":664,"title":665,"description":666},"\u002Fdocs\u002Fapi\u002Futils\u002Fupdate-app-config","updateAppConfig","在运行时更新 App Config。",{"path":668,"title":669,"description":670},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fadd","nuxt add","在你的 Nuxt 应用中快速搭建一个实体（文件）。",{"path":672,"title":673,"description":674},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fanalyze","nuxt analyze","分析生产环境的打包产物或你的 Nuxt 应用。",{"path":676,"title":677,"description":678},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fbuild","nuxt build","构建你的 Nuxt 应用。",{"path":680,"title":681,"description":682},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fbuild-module","nuxt build-module","用于在发布前构建你的 Nuxt 模块的 Nuxt 命令。",{"path":684,"title":685,"description":686},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fcleanup","nuxt cleanup","移除常见的 Nuxt 生成文件和缓存。",{"path":688,"title":689,"description":690},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fdev","nuxt dev","dev 命令会在 http:\u002F\u002Flocalhost:3000 启动一个带有热模块替换（HMR）的开发服务器。",{"path":692,"title":693,"description":694},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fdevtools","nuxt devtools","devtools 命令允许你基于每个项目启用或禁用 Nuxt DevTools。",{"path":696,"title":697,"description":698},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fgenerate","nuxt generate","预渲染应用的每一个路由，并将结果存储为纯 HTML 文件。",{"path":700,"title":701,"description":702},"\u002Fdocs\u002Fapi\u002Fcommands\u002Finfo","nuxt info","info 命令会记录当前或指定 Nuxt 项目的相关信息。",{"path":704,"title":705,"description":706},"\u002Fdocs\u002Fapi\u002Fcommands\u002Finit","create nuxt","init 命令用于初始化一个全新的 Nuxt 项目。",{"path":708,"title":709,"description":710},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fmodule","nuxt module","通过命令行搜索并向你的 Nuxt 应用添加模块。",{"path":712,"title":713,"description":714},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fprepare","nuxt prepare","prepare 命令会在你的应用中创建一个 .nuxt 目录并生成类型。",{"path":716,"title":717,"description":718},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fpreview","nuxt preview","preview 命令会启动一个服务器，用于在运行 build 命令后预览你的应用。",{"path":720,"title":721,"description":722},"\u002Fdocs\u002Fapi\u002Fcommands\u002Ftest","nuxt test","test 命令使用 @nuxt\u002Ftest-utils 运行测试。",{"path":724,"title":725,"description":726},"\u002Fdocs\u002Fapi\u002Fcommands\u002Ftypecheck","nuxt typecheck","typecheck 命令运行 vue-tsc 来全量检查你的应用类型。",{"path":728,"title":729,"description":730},"\u002Fdocs\u002Fapi\u002Fcommands\u002Fupgrade","nuxt upgrade","upgrade 命令将 Nuxt 升级到最新版本。",{"path":732,"title":733,"description":734},"\u002Fdocs\u002Fapi\u002Fkit\u002Fmodules","Modules","Nuxt Kit 提供了一系列工具，帮助你创建和使用模块。你可以使用这些工具来创建自己的模块，或复用已有的模块。",{"path":736,"title":737,"description":738},"\u002Fdocs\u002Fapi\u002Fkit\u002Fruntime-config","Runtime Config","Nuxt Kit 提供了一系列工具，帮助你访问和修改 Nuxt 运行时配置。",{"path":740,"title":741,"description":742},"\u002Fdocs\u002Fapi\u002Fkit\u002Ftemplates","Templates","Nuxt Kit 提供了一系列工具，帮助你处理模板。这些函数允许你在开发和构建期间生成额外的文件。",{"path":744,"title":745,"description":746},"\u002Fdocs\u002Fapi\u002Fkit\u002Fapp-config","App Config","Nuxt Kit 提供了一系列工具，帮助你访问和修改 Nuxt 应用配置。",{"path":748,"title":749,"description":750},"\u002Fdocs\u002Fapi\u002Fkit\u002Fnitro","Nitro","Nuxt Kit 提供了一系列工具，帮助你使用 Nitro。这些函数允许你添加服务器处理器、插件和预渲染路由。",{"path":752,"title":753,"description":754},"\u002Fdocs\u002Fapi\u002Fkit\u002Fresolving","Resolving","Nuxt Kit 提供了从 Nuxt 根目录或自定义基准路径解析路径的实用工具。",{"path":756,"title":757,"description":758},"\u002Fdocs\u002Fapi\u002Fkit\u002Flogging","Logging","Nuxt Kit 提供了一系列工具，帮助你使用日志记录。这些函数允许你以额外功能记录消息。",{"path":760,"title":761,"description":762},"\u002Fdocs\u002Fapi\u002Fkit\u002Fbuilder","Builder","Nuxt Kit 提供了一系列工具，帮助你使用构建器。这些函数允许你扩展 Vite 和 webpack 配置。",{"path":764,"title":765,"description":766},"\u002Fdocs\u002Fapi\u002Fkit\u002Fexamples","Examples","Nuxt Kit 工具的使用示例。",{"path":768,"title":58,"description":769},"\u002Fdocs\u002Fapi\u002Fkit\u002Flayers","Nuxt Kit 提供了帮助你处理层及其目录结构的工具。",{"path":771,"title":772,"description":773},"\u002Fdocs\u002Fapi\u002Fkit\u002Fprogrammatic","Programmatic Usage","Nuxt Kit 提供了一系列工具，帮助你以编程方式使用 Nuxt。这些函数允许你加载 Nuxt、构建 Nuxt，以及加载 Nuxt 配置。",{"path":775,"title":776,"description":777},"\u002Fdocs\u002Fapi\u002Fkit\u002Fcompatibility","Compatibility","Nuxt Kit 提供了一系列工具，帮助你检查模块与不同 Nuxt 版本的兼容性。",{"path":779,"title":780,"description":781},"\u002Fdocs\u002Fapi\u002Fkit\u002Fautoimports","Auto-imports","Nuxt Kit 提供了一系列工具，帮助你处理自动导入。这些函数允许你注册自己的 utils、composables 和 Vue API。",{"path":783,"title":784,"description":785},"\u002Fdocs\u002Fapi\u002Fkit\u002Fcomponents","Components","Nuxt Kit 提供了一系列工具，帮助你处理组件。你可以全局或局部注册组件，也可以添加要被扫描的目录。",{"path":787,"title":788,"description":789},"\u002Fdocs\u002Fapi\u002Fkit\u002Fcontext","Context","Nuxt Kit 提供了一系列工具，帮助你处理上下文。",{"path":791,"title":792,"description":793},"\u002Fdocs\u002Fapi\u002Fkit\u002Fpages","Pages","Nuxt Kit 提供了一系列工具，帮助你创建和使用页面。你可以使用这些工具来操作页面配置或定义路由规则。",{"path":795,"title":796,"description":797},"\u002Fdocs\u002Fapi\u002Fkit\u002Flayout","Layout","Nuxt Kit 提供了一系列工具，帮助你处理布局。",{"path":799,"title":800,"description":801},"\u002Fdocs\u002Fapi\u002Fkit\u002Fhead","Head","Nuxt Kit 提供了一系列工具，帮助你在模块中管理 head 配置。",{"path":803,"title":804,"description":805},"\u002Fdocs\u002Fapi\u002Fkit\u002Fplugins","Plugins","Nuxt Kit 提供了一系列工具，帮助你创建和使用插件。你可以使用这些函数向你的模块添加插件或插件模板。",{"path":807,"title":330,"description":808},"\u002Fdocs\u002Fapi\u002Fadvanced\u002Fhooks","Nuxt 提供了一套强大的钩子系统，可以通过钩子扩展几乎各个方面。",{"path":810,"title":811,"description":812},"\u002Fdocs\u002Fapi\u002Fadvanced\u002Fimport-meta","Import meta","使用 `import.meta` 了解你的代码运行在何处。",{"path":814,"title":815,"description":816},"\u002Fdocs\u002Fapi\u002Fnuxt-config","Nuxt 配置","发现你可以在 nuxt.config.ts 文件中使用的所有选项。",{"path":818,"title":819,"description":820},"\u002Fdocs\u002Fapi","Nuxt API 参考","探索所有 Nuxt 内部机制：组件、组合式函数、工具函数、命令等等。",{"path":822,"title":823,"description":824},"\u002Fdocs\u002Fcommunity\u002Fgetting-help","获取帮助","我们是一个友好的开发者社区，很乐意提供帮助。",{"path":826,"title":827,"description":828},"\u002Fdocs\u002Fcommunity\u002Freporting-bugs","报告 Bug","开源中最有价值的角色之一，就是花时间把 bug 报告得清楚明白。",{"path":830,"title":831,"description":832},"\u002Fdocs\u002Fcommunity\u002Fcontribution","贡献","Nuxt 是一个社区项目——因此我们欢迎各种形式的贡献！❤️",{"path":834,"title":835,"description":836},"\u002Fdocs\u002Fcommunity\u002Fframework-contribution","框架贡献","关于向框架仓库贡献的一些具体要点。",{"path":838,"title":839,"description":840},"\u002Fdocs\u002Fcommunity\u002Froadmap","路线图","Nuxt 在不断发展，新功能和模块一直在增加。",{"path":842,"title":843,"description":844},"\u002Fdocs\u002Fcommunity\u002Fchangelog","发布","发现 Nuxt 及 Nuxt 官方模块的最新发布。",{"path":846,"title":847,"description":848},"\u002Fdocs\u002Fbridge\u002Foverview","概述","缩小与 Nuxt 3 的差异，并减轻迁移到 Nuxt 3 的负担。",{"path":850,"title":14,"description":851},"\u002Fdocs\u002Fbridge\u002Fconfiguration","了解如何根据你的需求配置 Nuxt Bridge。",{"path":853,"title":222,"description":854},"\u002Fdocs\u002Fbridge\u002Ftypescript","了解如何在 Nuxt Bridge 中使用 TypeScript。",{"path":856,"title":857,"description":858},"\u002Fdocs\u002Fbridge\u002Fbridge-composition-api","旧版 Composition API","了解如何使用 Nuxt Bridge 迁移到 Composition API。",{"path":860,"title":861,"description":862},"\u002Fdocs\u002Fbridge\u002Fplugins-and-middleware","插件和中间件","了解如何从 Nuxt 2 迁移到 Nuxt Bridge 的新插件和中间件。",{"path":864,"title":865,"description":866},"\u002Fdocs\u002Fbridge\u002Fnuxt3-compatible-api","新的 Composition API","Nuxt Bridge 实现了与 Nuxt 3 兼容的组合式函数。",{"path":868,"title":869,"description":870},"\u002Fdocs\u002Fbridge\u002Fmeta","Meta 标签","了解如何从 Nuxt 2 迁移到 Nuxt Bridge 的新 meta 标签。",{"path":872,"title":322,"description":873},"\u002Fdocs\u002Fbridge\u002Fruntime-config","Nuxt 提供了一个运行时配置 API，用于在应用中暴露配置和密钥。",{"path":875,"title":749,"description":876},"\u002Fdocs\u002Fbridge\u002Fnitro","通过 Nuxt Bridge 为你的 Nuxt 2 应用激活 Nitro。",{"path":878,"title":879,"description":880},"\u002Fdocs\u002Fbridge\u002Fvite","Vite","通过 Nuxt Bridge 为你的 Nuxt 2 应用激活 Vite。",{"path":882,"title":847,"description":883},"\u002Fdocs\u002Fmigration\u002Foverview","Nuxt 3 是对 Nuxt 2 的完整重写，并且基于一套全新的底层技术。",{"path":885,"title":886,"description":887},"\u002Fdocs\u002Fmigration\u002Fbundling","构建工具","了解如何从 Nuxt 2 迁移到 Nuxt 3 的构建工具。",{"path":889,"title":890,"description":891},"\u002Fdocs\u002Fmigration\u002Fserver","服务器","了解如何从 Nuxt 2 迁移到 Nuxt 3 的服务器。",{"path":893,"title":14,"description":894},"\u002Fdocs\u002Fmigration\u002Fconfiguration","了解如何从 Nuxt 2 迁移到 Nuxt 3 的新配置。",{"path":896,"title":214,"description":897},"\u002Fdocs\u002Fmigration\u002Fmodule-authors","了解如何从 Nuxt 2 迁移到 Nuxt 3 模块。",{"path":899,"title":206,"description":900},"\u002Fdocs\u002Fmigration\u002Fauto-imports","Nuxt 3 采用最小摩擦的方式，即在任何可能的地方自动导入组件和组合式函数。",{"path":902,"title":869,"description":903},"\u002Fdocs\u002Fmigration\u002Fmeta","管理你的 meta 标签，从 Nuxt 2 到 Nuxt 3。",{"path":905,"title":861,"description":906},"\u002Fdocs\u002Fmigration\u002Fplugins-and-middleware","了解如何从 Nuxt 2 迁移到 Nuxt 3 的插件和中间件。",{"path":908,"title":909,"description":910},"\u002Fdocs\u002Fmigration\u002Fpages-and-layouts","页面和布局","了解如何从 Nuxt 2 迁移到 Nuxt 3 的页面和布局。",{"path":912,"title":913,"description":914},"\u002Fdocs\u002Fmigration\u002Fcomponent-options","组件选项","了解如何从 Nuxt 2 的组件选项迁移到 Nuxt 3 的组合式函数。",{"path":916,"title":322,"description":917},"\u002Fdocs\u002Fmigration\u002Fruntime-config","了解如何从 Nuxt 2 迁移到 Nuxt 3 的运行时配置。",{"path":919,"title":920,"description":921},"\u002Fdocs\u002Freadme","Nuxt 文档","本仓库包含 Nuxt 的文档，托管于 https:\u002F\u002Fnuxt.com\u002Fdocs\u002Fgetting-started\u002Fintroduction",{"path":923,"title":924,"description":925},"\u002Fdocs\u002Ferrors\u002Fb5001","NUXT_B5001","缺少 compatibilityDate (兼容性日期)",{"path":927,"title":928,"description":929},"\u002Fdocs\u002Ferrors\u002Fb5003","NUXT_B5003","保留的 runtimeConfig.app 命名空间",{"path":931,"title":932,"description":933},"\u002Fdocs\u002Ferrors\u002Fb5004","NUXT_B5004","不支持外部配置文件",{"path":935,"title":936,"description":937},"\u002Fdocs\u002Ferrors\u002Fe1001","NUXT_E1001","在 Nuxt 上下文之外调用了组合式函数。",{"path":939,"title":940,"description":941},"\u002Fdocs\u002Ferrors\u002Fe1006","NUXT_E1006","onPrehydrate 未被构建流水线处理。",{"path":943,"title":944,"description":945},"\u002Fdocs\u002Ferrors\u002Fe1007","NUXT_E1007","编译期提示辅助函数在运行时被调用。",{"path":947,"title":948,"description":949},"\u002Fdocs\u002Ferrors\u002Fe2001","NUXT_E2001","外部导航未设置 external: true。",{"path":951,"title":952,"description":953},"\u002Fdocs\u002Ferrors\u002Fe2002","NUXT_E2002","使用了危险协议的导航。",{"path":955,"title":956,"description":957},"\u002Fdocs\u002Ferrors\u002Fe2003","NUXT_E2003","abortNavigation() 在中间件之外被调用。",{"path":959,"title":960,"description":961},"\u002Fdocs\u002Ferrors\u002Fe2004","NUXT_E2004","未知的路由中间件。",{"path":963,"title":964,"description":965},"\u002Fdocs\u002Ferrors\u002Fe2005","NUXT_E2005","在中间件内调用了 useRoute。",{"path":967,"title":968,"description":969},"\u002Fdocs\u002Ferrors\u002Fe2007","NUXT_E2007","在组件中于服务端调用了 setPageLayout。",{"path":971,"title":972,"description":973},"\u002Fdocs\u002Ferrors\u002Fe3001","NUXT_E3001","useFetch 的请求 URL 以 \"\u002F\u002F\" 开头。",{"path":975,"title":976,"description":977},"\u002Fdocs\u002Ferrors\u002Fe3008","NUXT_E3008","useAsyncData 的 key 必须是非空字符串。",{"path":979,"title":980,"description":981},"\u002Fdocs\u002Ferrors\u002Fe3009","NUXT_E3009","useAsyncData 的处理函数必须是一个函数。",{"path":983,"title":984,"description":985},"\u002Fdocs\u002Ferrors\u002Fe4012","NUXT_E4012","无法解析 island（岛）响应。",{"path":987,"title":988,"description":989},"\u002Fdocs\u002Ferrors\u002Fe4016","NUXT_E4016","嵌套页面无法显示，因为其父页面没有渲染 \u003CNuxtPage \u002F>。",{"path":991,"title":992,"description":993},"\u002Fdocs\u002Ferrors\u002Fe5001","NUXT_E5001","应用清单（app manifest）未启用。",{"path":995,"title":996,"description":997},"\u002Fdocs\u002Ferrors\u002Fe6001","NUXT_E6001","缺少 Unhead 实例。",{"path":999,"title":1000,"description":1001},"\u002Fdocs\u002Ferrors\u002Fe7001","NUXT_E7001","Payload URL 包含主机名。",{"path":1003,"title":1004,"description":1005},"\u002Fdocs\u002Ferrors\u002Fe7007","NUXT_E7007","useState 的初始化值必须是一个函数。",{"path":1007,"title":1008,"description":1009},"\u002Fdocs\u002Ferrors\u002Fe7008","NUXT_E7008","callOnce 的 fn 必须是一个函数。",{"path":1011,"title":1012,"description":1013},"\u002Fdocs\u002Ferrors\u002Fe7009","NUXT_E7009","useState 的 key 必须是一个字符串。",{"path":1015,"title":1016,"description":1017},"\u002Fdocs\u002Ferrors\u002Fe7010","NUXT_E7010","callOnce 的 key 必须是一个字符串。",{"id":1019,"title":74,"body":1020,"description":75,"extension":4321,"meta":4322,"navigation":4323,"path":73,"seo":4324,"stem":4325,"__hash__":4326},"docs\u002Fdocs\u002F1.getting-started\u002F18.upgrade.md",{"type":1021,"value":1022,"toc":4244},"minimark",[1023,1028,1033,1049,1139,1143,1150,1154,1162,1166,1173,1180,1252,1262,1405,1415,1418,1424,1431,1436,1459,1468,1472,1475,1563,1576,1580,1584,1587,1601,1604,1607,1670,1674,1679,1682,1691,1698,1707,1712,1768,1772,1775,1789,1792,1797,1807,2255,2259,2274,2592,2599,2603,2607,2610,2625,2640,2643,2685,2690,2694,2699,2702,2730,2736,2741,2747,2750,2754,2764,2829,2844,2847,2864,2870,2903,2920,2923,2958,2970,3008,3020,3024,3030,3035,3078,3083,3140,3150,3159,3183,3192,3195,3238,3242,3293,3300,3304,3307,3332,3335,3345,3354,3357,3360,3366,3393,3402,3409,3413,3416,3432,3435,3438,3447,3450,3461,3528,3531,3534,3545,3549,3552,3563,3566,3585,3588,3600,3609,3613,3616,3637,3661,3667,3670,3679,3682,3696,3711,3726,3743,3751,3799,3803,3807,3810,3830,3833,3843,3846,3866,3906,3917,3923,3969,3973,3977,3980,3994,4004,4007,4010,4013,4020,4043,4125,4129,4133,4136,4153,4156,4163,4166,4176,4223,4241],[1024,1025,1027],"h2",{"id":1026},"升级-nuxtupgrading-nuxt","升级 Nuxt（Upgrading Nuxt）",[1029,1030,1032],"h3",{"id":1031},"最新版本latest-release","最新版本（Latest release）",[1034,1035,1036,1037,1044,1045,1048],"p",{},"要将 Nuxt 升级到 ",[1038,1039,1043],"a",{"href":1040,"rel":1041},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Freleases",[1042],"nofollow","最新版本","，请使用 ",[1046,1047,729],"code",{}," 命令。",[1050,1051,1053,1078,1092,1106,1123],"code-group",{"sync":1052},"pm",[1054,1055,1060],"pre",{"className":1056,"code":1057,"filename":1058,"language":1059,"meta":354,"style":354},"language-bash shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","npx nuxt upgrade\n","npm","bash",[1046,1061,1062],{"__ignoreMap":354},[1063,1064,1067,1071,1075],"span",{"class":1065,"line":1066},"line",1,[1063,1068,1070],{"class":1069},"sJK67","npx",[1063,1072,1074],{"class":1073},"s-Aze"," nuxt",[1063,1076,1077],{"class":1073}," upgrade\n",[1054,1079,1082],{"className":1056,"code":1080,"filename":1081,"language":1059,"meta":354,"style":354},"yarn nuxt upgrade\n","yarn",[1046,1083,1084],{"__ignoreMap":354},[1063,1085,1086,1088,1090],{"class":1065,"line":1066},[1063,1087,1081],{"class":1069},[1063,1089,1074],{"class":1073},[1063,1091,1077],{"class":1073},[1054,1093,1096],{"className":1056,"code":1094,"filename":1095,"language":1059,"meta":354,"style":354},"pnpm nuxt upgrade\n","pnpm",[1046,1097,1098],{"__ignoreMap":354},[1063,1099,1100,1102,1104],{"class":1065,"line":1066},[1063,1101,1095],{"class":1069},[1063,1103,1074],{"class":1073},[1063,1105,1077],{"class":1073},[1054,1107,1110],{"className":1056,"code":1108,"filename":1109,"language":1059,"meta":354,"style":354},"bun x nuxt upgrade\n","bun",[1046,1111,1112],{"__ignoreMap":354},[1063,1113,1114,1116,1119,1121],{"class":1065,"line":1066},[1063,1115,1109],{"class":1069},[1063,1117,1118],{"class":1073}," x",[1063,1120,1074],{"class":1073},[1063,1122,1077],{"class":1073},[1054,1124,1127],{"className":1056,"code":1125,"filename":1126,"language":1059,"meta":354,"style":354},"deno x nuxt upgrade\n","deno",[1046,1128,1129],{"__ignoreMap":354},[1063,1130,1131,1133,1135,1137],{"class":1065,"line":1066},[1063,1132,1126],{"class":1069},[1063,1134,1118],{"class":1073},[1063,1136,1074],{"class":1073},[1063,1138,1077],{"class":1073},[1029,1140,1142],{"id":1141},"每日发布通道nightly-release-channel","每日发布通道（Nightly Release Channel）",[1034,1144,1145,1146,1149],{},"要在正式发布之前使用最新的 Nuxt 构建和测试特性，请阅读 ",[1038,1147,1148],{"href":325},"nightly release channel"," 指南。",[1024,1151,1153],{"id":1152},"测试-nuxt-5testing-nuxt-5","测试 Nuxt 5（Testing Nuxt 5）",[1034,1155,1156,1157,1161],{},"Nuxt 5 ",[1158,1159,1160],"strong",{},"目前正在开发中","。在发布之前，可以从 Nuxt 4.2+ 版本开始测试 Nuxt 5 的许多破坏性变更。",[1029,1163,1165],{"id":1164},"选择加入-nuxt-5opting-in-to-nuxt-5","选择加入 Nuxt 5（Opting in to Nuxt 5）",[1034,1167,1168,1169,1172],{},"首先，将 Nuxt 升级到 ",[1038,1170,1043],{"href":1040,"rel":1171},[1042],"。",[1034,1174,1175,1176,1179],{},"然后你可以将 ",[1046,1177,1178],{},"future.compatibilityVersion"," 设为匹配 Nuxt 5 的行为：",[1054,1181,1186],{"className":1182,"code":1183,"filename":174,"language":1184,"meta":1185,"style":354},"language-ts shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","export default defineNuxtConfig({\n  future: {\n    compatibilityVersion: 5,\n  },\n})\n","ts","twoslash",[1046,1187,1188,1209,1222,1237,1243],{"__ignoreMap":354},[1063,1189,1190,1194,1197,1201,1205],{"class":1065,"line":1066},[1063,1191,1193],{"class":1192},"szyBz","export",[1063,1195,1196],{"class":1192}," default",[1063,1198,1200],{"class":1199},"srJn9"," defineNuxtConfig",[1063,1202,1204],{"class":1203},"smVNa","(",[1063,1206,1208],{"class":1207},"sF54B","{\n",[1063,1210,1212,1216,1219],{"class":1065,"line":1211},2,[1063,1213,1215],{"class":1214},"sOtFm","  future",[1063,1217,1218],{"class":1207},":",[1063,1220,1221],{"class":1207}," {\n",[1063,1223,1225,1228,1230,1234],{"class":1065,"line":1224},3,[1063,1226,1227],{"class":1214},"    compatibilityVersion",[1063,1229,1218],{"class":1207},[1063,1231,1233],{"class":1232},"sOUxV"," 5",[1063,1235,1236],{"class":1207},",\n",[1063,1238,1240],{"class":1065,"line":1239},4,[1063,1241,1242],{"class":1207},"  },\n",[1063,1244,1246,1249],{"class":1065,"line":1245},5,[1063,1247,1248],{"class":1207},"}",[1063,1250,1251],{"class":1203},")\n",[1034,1253,1254,1255,1257,1258,1261],{},"当你将 ",[1046,1256,1178],{}," 设为 ",[1046,1259,1260],{},"5"," 时，你的 Nuxt 配置中各个位置的默认值都会改变，以选择加入 Nuxt v5 行为，包括：",[1263,1264,1265,1276,1287,1302,1321,1342,1356,1372,1382,1402],"ul",{},[1266,1267,1268,1271,1272,1275],"li",{},[1158,1269,1270],{},"Vite Environment API","：使用新的 ",[1038,1273,1270],{"href":1274},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#migration-to-vite-environment-api"," 以获得改进的构建配置",[1266,1277,1278,1281,1282,1286],{},[1158,1279,1280],{},"区分大小写的路由","：页面路由",[1038,1283,1285],{"href":1284},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#case-sensitive-routing","精确匹配 URL 大小写","，与 Nitro 一致",[1266,1288,1289,1292,1293,1297,1298,1301],{},[1158,1290,1291],{},"规范化的页面名称","：页面组件名称将",[1038,1294,1296],{"href":1295},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#normalized-page-component-names","匹配其路由名称","，以获得一致的 ",[1046,1299,1300],{},"\u003CKeepAlive>"," 行为",[1266,1303,1304,1309,1310,1312,1313,1317,1318],{},[1158,1305,1306,1308],{},[1046,1307,577],{}," 重置为默认值","：",[1046,1311,577],{}," 会",[1038,1314,1316],{"href":1315},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#respect-defaults-when-clearing-usestate","将状态重置为其初始值","，而不是设为 ",[1046,1319,1320],{},"undefined",[1266,1322,1323,1309,1329,1338,1339],{},[1158,1324,1325,1326],{},"非异步的 ",[1046,1327,1328],{},"callHook",[1038,1330,1332,1334,1335],{"href":1331},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#non-async-callhook",[1046,1333,1328],{}," 可能返回 ",[1046,1336,1337],{},"void","，而不是始终返回 ",[1046,1340,1341],{},"Promise",[1266,1343,1344,1347,1348,1355],{},[1158,1345,1346],{},"注释节点占位符","：仅客户端组件使用",[1038,1349,1351,1352],{"href":1350},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#client-only-comment-placeholders","注释节点而非 ",[1046,1353,1354],{},"\u003Cdiv>"," 作为 SSR 占位符，修复了一个 scoped styles 的 hydration 问题",[1266,1357,1358,1361,1362,1364,1365,1371],{},[1158,1359,1360],{},"更严格的副作用导入","：生成的 ",[1046,1363,182],{}," 启用了 ",[1038,1366,1368],{"href":1367},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#stricter-side-effect-imports",[1046,1369,1370],{},"noUncheckedSideEffectImports","，以匹配 TypeScript 7 的默认值",[1266,1373,1374,1309,1377,1381],{},[1158,1375,1376],{},"Vue Options API 默认禁用",[1038,1378,1380],{"href":1379},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#vue-options-api-disabled-by-default","Options API 被编译出客户端 bundle"," 以减小其体积",[1266,1383,1384,1390,1391,1394,1395],{},[1158,1385,1386,1389],{},[1046,1387,1388],{},"process.*"," 类型增强已移除","：TypeScript 不再在 ",[1046,1392,1393],{},"NodeJS.Process"," 上暴露",[1038,1396,1398,1399,1401],{"href":1397},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#process-type-augmentation-removed","已弃用的 ",[1046,1400,1388],{}," 标志",[1266,1403,1404],{},"其他 Nuxt 5 改进和变更（随着可用而添加）",[1406,1407,1408],"note",{},[1034,1409,1410,1411,1414],{},"本节在最终发布之前可能会有变化，所以如果你正在使用 ",[1046,1412,1413],{},"future.compatibilityVersion: 5"," 测试 Nuxt 5，请定期回来查看。",[1034,1416,1417],{},"破坏性或有重大影响的变更将在下方列出，并附带向前\u002F向后兼容的迁移步骤。",[1029,1419,1421,1423],{"id":1420},"process-类型增强已移除process-type-augmentation-removed",[1046,1422,1388],{}," 类型增强已移除（Process Type Augmentation Removed）",[1034,1425,1426,1427,1430],{},"🚦 ",[1158,1428,1429],{},"影响级别","：最小",[1432,1433,1435],"h4",{"id":1434},"变更内容what-changed","变更内容（What Changed）",[1034,1437,1438,1439,1441,1442,1445,1446,1445,1449,1445,1452,1454,1455,1458],{},"Nuxt 不再为 ",[1046,1440,1393],{}," 增强 ",[1046,1443,1444],{},"browser","、",[1046,1447,1448],{},"client",[1046,1450,1451],{},"dev",[1046,1453,150],{}," 和 ",[1046,1456,1457],{},"test","。这些标志的构建时定义仍然保留以兼容，但 TypeScript 不会将它们视为已知属性。",[1034,1460,1461,1462,1467],{},"请优先使用 ",[1038,1463,1464],{"href":810},[1046,1465,1466],{},"import.meta.*","。这些标志在构建时被替换，并且保持可 tree-shake。",[1432,1469,1471],{"id":1470},"迁移步骤migration-steps","迁移步骤（Migration Steps）",[1034,1473,1474],{},"替换你的应用代码、模块和库中的遗留检查：",[1054,1476,1478],{"className":1182,"code":1477,"language":1184,"meta":354,"style":354},"\u002F\u002F 之前\n\u002F\u002F eslint-disable-next-line nuxt\u002Fprefer-import-meta\nif (process.server) {\n  \u002F* ... *\u002F\n}\n\n\u002F\u002F 之后\nif (import.meta.server) {\n  \u002F* ... *\u002F\n}\n",[1046,1479,1480,1486,1491,1507,1512,1517,1524,1530,1553,1558],{"__ignoreMap":354},[1063,1481,1482],{"class":1065,"line":1066},[1063,1483,1485],{"class":1484},"sZqJ9","\u002F\u002F 之前\n",[1063,1487,1488],{"class":1065,"line":1211},[1063,1489,1490],{"class":1484},"\u002F\u002F eslint-disable-next-line nuxt\u002Fprefer-import-meta\n",[1063,1492,1493,1496,1499,1502,1505],{"class":1065,"line":1224},[1063,1494,1495],{"class":1192},"if",[1063,1497,1498],{"class":1203}," (process",[1063,1500,1501],{"class":1207},".",[1063,1503,1504],{"class":1203},"server) ",[1063,1506,1208],{"class":1207},[1063,1508,1509],{"class":1065,"line":1239},[1063,1510,1511],{"class":1484},"  \u002F* ... *\u002F\n",[1063,1513,1514],{"class":1065,"line":1245},[1063,1515,1516],{"class":1207},"}\n",[1063,1518,1520],{"class":1065,"line":1519},6,[1063,1521,1523],{"emptyLinePlaceholder":1522},true,"\n",[1063,1525,1527],{"class":1065,"line":1526},7,[1063,1528,1529],{"class":1484},"\u002F\u002F 之后\n",[1063,1531,1533,1535,1538,1541,1543,1547,1549,1551],{"class":1065,"line":1532},8,[1063,1534,1495],{"class":1192},[1063,1536,1537],{"class":1203}," (",[1063,1539,1540],{"class":1192},"import",[1063,1542,1501],{"class":1207},[1063,1544,1546],{"class":1545},"sJTDI","meta",[1063,1548,1501],{"class":1207},[1063,1550,1504],{"class":1203},[1063,1552,1208],{"class":1207},[1063,1554,1556],{"class":1065,"line":1555},9,[1063,1557,1511],{"class":1484},[1063,1559,1561],{"class":1065,"line":1560},10,[1063,1562,1516],{"class":1207},[1034,1564,1565,1572,1573,1575],{},[1038,1566,1569],{"href":1567,"rel":1568},"https:\u002F\u002Feslint.nuxt.com\u002Fpackages\u002Fplugin#nuxtprefer-import-meta",[1042],[1046,1570,1571],{},"nuxt\u002Fprefer-import-meta"," ESLint 规则会标记剩余的 ",[1046,1574,1388],{}," 用法。",[1029,1577,1579],{"id":1578},"区分大小写的路由case-sensitive-routing","区分大小写的路由（Case-Sensitive Routing）",[1034,1581,1426,1582,1430],{},[1158,1583,1429],{},[1432,1585,1435],{"id":1586},"变更内容what-changed-1",[1034,1588,1589,1590,1593,1594,1597,1598,1172],{},"在 ",[1046,1591,1592],{},"compatibilityVersion: 5"," 下，页面路由区分大小写地匹配 URL，与 Nitro 一致。例如，",[1046,1595,1596],{},"\u002FAbout"," 不再匹配 ",[1046,1599,1600],{},"pages\u002Fabout.vue",[1432,1602,1471],{"id":1603},"迁移步骤migration-steps-1",[1034,1605,1606],{},"更新链接以使用与其页面路由相同的大小写。要保留大小写不敏感匹配：",[1054,1608,1610],{"className":1182,"code":1609,"filename":174,"language":1184,"meta":1185,"style":354},"export default defineNuxtConfig({\n  router: {\n    options: {\n      sensitive: false,\n    },\n  },\n})\n",[1046,1611,1612,1624,1633,1642,1655,1660,1664],{"__ignoreMap":354},[1063,1613,1614,1616,1618,1620,1622],{"class":1065,"line":1066},[1063,1615,1193],{"class":1192},[1063,1617,1196],{"class":1192},[1063,1619,1200],{"class":1199},[1063,1621,1204],{"class":1203},[1063,1623,1208],{"class":1207},[1063,1625,1626,1629,1631],{"class":1065,"line":1211},[1063,1627,1628],{"class":1214},"  router",[1063,1630,1218],{"class":1207},[1063,1632,1221],{"class":1207},[1063,1634,1635,1638,1640],{"class":1065,"line":1224},[1063,1636,1637],{"class":1214},"    options",[1063,1639,1218],{"class":1207},[1063,1641,1221],{"class":1207},[1063,1643,1644,1647,1649,1653],{"class":1065,"line":1239},[1063,1645,1646],{"class":1214},"      sensitive",[1063,1648,1218],{"class":1207},[1063,1650,1652],{"class":1651},"si1Qm"," false",[1063,1654,1236],{"class":1207},[1063,1656,1657],{"class":1065,"line":1245},[1063,1658,1659],{"class":1207},"    },\n",[1063,1661,1662],{"class":1065,"line":1519},[1063,1663,1242],{"class":1207},[1063,1665,1666,1668],{"class":1065,"line":1526},[1063,1667,1248],{"class":1207},[1063,1669,1251],{"class":1203},[1029,1671,1673],{"id":1672},"迁移到-vite-environment-apimigration-to-vite-environment-api","迁移到 Vite Environment API（Migration to Vite Environment API）",[1034,1675,1426,1676,1678],{},[1158,1677,1429],{},"：中等",[1432,1680,1435],{"id":1681},"变更内容what-changed-2",[1034,1683,1684,1685,1690],{},"Nuxt 5 迁移到 Vite 6 新的 ",[1038,1686,1689],{"href":1687,"rel":1688},"https:\u002F\u002Fvite.dev\u002Fguide\u002Fapi-environment",[1042],"Environment API","，它正式化了环境的概念，并提供了对每环境配置的更好控制。",[1034,1692,1693,1694,1697],{},"以前，Nuxt 使用单独的 client 和 server Vite 配置。现在，Nuxt 使用一个共享的 Vite 配置，配合使用 ",[1046,1695,1696],{},"applyToEnvironment()"," 方法定位特定环境的环境特定插件。",[1406,1699,1700],{},[1034,1701,1702,1703,1706],{},"Vite Environment API 在 Nuxt 5 中始终启用。",[1046,1704,1705],{},"experimental.viteEnvironmentApi"," 选项已被移除。",[1034,1708,1709],{},[1158,1710,1711],{},"关键变更：",[1713,1714,1715,1731,1756],"ol",{},[1266,1716,1717,1309,1723,1725,1726,1454,1728,1730],{},[1158,1718,1719,1720],{},"弃用的环境特定 ",[1046,1721,1722],{},"extendViteConfig()",[1046,1724,1722],{}," 中的 ",[1046,1727,150],{},[1046,1729,1448],{}," 选项已被弃用，使用时会出现警告。",[1266,1732,1733,1736,1737,1740,1741,1744,1745,1748,1749,1744,1752,1755],{},[1158,1734,1735],{},"变更了插件注册","：通过 ",[1046,1738,1739],{},"addVitePlugin()"," 注册且只针对一个环境（传入 ",[1046,1742,1743],{},"server: false"," 或 ",[1046,1746,1747],{},"client: false","）的 Vite 插件，其 ",[1046,1750,1751],{},"config",[1046,1753,1754],{},"configResolved"," 钩子不会被调用。",[1266,1757,1758,1309,1761,1454,1764,1767],{},[1158,1759,1760],{},"共享配置",[1046,1762,1763],{},"vite:extendConfig",[1046,1765,1766],{},"vite:configResolved"," 钩子现在使用共享配置，而不是单独的 client\u002Fserver 配置。",[1432,1769,1771],{"id":1770},"变更原因reasons-for-change","变更原因（Reasons for Change）",[1034,1773,1774],{},"Vite Environment API 提供了：",[1263,1776,1777,1780,1783,1786],{},[1266,1778,1779],{},"开发和生产构建之间更好的一致性",[1266,1781,1782],{},"对环境特定配置更细粒度的控制",[1266,1784,1785],{},"改进的性能与插件架构",[1266,1787,1788],{},"支持除 client 和 server 之外的自定义环境",[1432,1790,1471],{"id":1791},"迁移步骤migration-steps-2",[1793,1794,1796],"h5",{"id":1795},"_1-迁移为使用-vite-插件","1. 迁移为使用 Vite 插件",[1034,1798,1799,1800,1445,1803,1454,1805,1172],{},"我们建议你使用 Vite 插件，而不是 ",[1046,1801,1802],{},"extendViteConfig",[1046,1804,1766],{},[1046,1806,1763],{},[1054,1808,1810],{"className":1182,"code":1809,"language":1184,"meta":354,"style":354},"\u002F\u002F 之前\nextendViteConfig((config) => {\n  config.optimizeDeps.include.push('my-package')\n}, { server: false })\n\nnuxt.hook('vite:extendConfig' \u002F* 或 vite:configResolved *\u002F, (config, { isClient }) => {\n  if (isClient) {\n    config.optimizeDeps.include.push('my-package')\n  }\n})\n\n\u002F\u002F 之后\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    \u002F\u002F 你可以在这里设置全局 vite 配置\n  },\n  configResolved (config) {\n    \u002F\u002F 你可以在这里访问完全解析的 vite 配置\n  },\n  configEnvironment (name, config) {\n    \u002F\u002F 你可以在这里设置环境特定的 vite 配置\n    if (name === 'client') {\n      config.optimizeDeps ||= {}\n      config.optimizeDeps.include ||= []\n      config.optimizeDeps.include.push('my-package')\n    }\n  },\n  applyToEnvironment (environment) {\n    return environment.name === 'client'\n  },\n}))\n",[1046,1811,1812,1816,1836,1869,1889,1893,1935,1950,1977,1982,1988,1993,1998,2015,2033,2047,2053,2058,2072,2078,2083,2103,2109,2133,2149,2167,2194,2200,2205,2220,2242,2247],{"__ignoreMap":354},[1063,1813,1814],{"class":1065,"line":1066},[1063,1815,1485],{"class":1484},[1063,1817,1818,1820,1822,1824,1827,1830,1834],{"class":1065,"line":1211},[1063,1819,1802],{"class":1199},[1063,1821,1204],{"class":1203},[1063,1823,1204],{"class":1207},[1063,1825,1751],{"class":1826},"ssIVr",[1063,1828,1829],{"class":1207},")",[1063,1831,1833],{"class":1832},"sV7Px"," =>",[1063,1835,1221],{"class":1207},[1063,1837,1838,1841,1843,1846,1848,1851,1853,1856,1858,1862,1865,1867],{"class":1065,"line":1224},[1063,1839,1840],{"class":1203},"  config",[1063,1842,1501],{"class":1207},[1063,1844,1845],{"class":1203},"optimizeDeps",[1063,1847,1501],{"class":1207},[1063,1849,1850],{"class":1203},"include",[1063,1852,1501],{"class":1207},[1063,1854,1855],{"class":1199},"push",[1063,1857,1204],{"class":1214},[1063,1859,1861],{"class":1860},"s0jeK","'",[1063,1863,1864],{"class":1073},"my-package",[1063,1866,1861],{"class":1860},[1063,1868,1251],{"class":1214},[1063,1870,1871,1874,1877,1880,1882,1884,1887],{"class":1065,"line":1239},[1063,1872,1873],{"class":1207},"},",[1063,1875,1876],{"class":1207}," {",[1063,1878,1879],{"class":1214}," server",[1063,1881,1218],{"class":1207},[1063,1883,1652],{"class":1651},[1063,1885,1886],{"class":1207}," }",[1063,1888,1251],{"class":1203},[1063,1890,1891],{"class":1065,"line":1245},[1063,1892,1523],{"emptyLinePlaceholder":1522},[1063,1894,1895,1898,1900,1903,1905,1907,1909,1911,1914,1917,1919,1921,1923,1925,1928,1931,1933],{"class":1065,"line":1519},[1063,1896,1897],{"class":1203},"nuxt",[1063,1899,1501],{"class":1207},[1063,1901,1902],{"class":1199},"hook",[1063,1904,1204],{"class":1203},[1063,1906,1861],{"class":1860},[1063,1908,1763],{"class":1073},[1063,1910,1861],{"class":1860},[1063,1912,1913],{"class":1484}," \u002F* 或 vite:configResolved *\u002F",[1063,1915,1916],{"class":1207},",",[1063,1918,1537],{"class":1207},[1063,1920,1751],{"class":1826},[1063,1922,1916],{"class":1207},[1063,1924,1876],{"class":1207},[1063,1926,1927],{"class":1826}," isClient",[1063,1929,1930],{"class":1207}," })",[1063,1932,1833],{"class":1832},[1063,1934,1221],{"class":1207},[1063,1936,1937,1940,1942,1945,1948],{"class":1065,"line":1526},[1063,1938,1939],{"class":1192},"  if",[1063,1941,1537],{"class":1214},[1063,1943,1944],{"class":1203},"isClient",[1063,1946,1947],{"class":1214},") ",[1063,1949,1208],{"class":1207},[1063,1951,1952,1955,1957,1959,1961,1963,1965,1967,1969,1971,1973,1975],{"class":1065,"line":1532},[1063,1953,1954],{"class":1203},"    config",[1063,1956,1501],{"class":1207},[1063,1958,1845],{"class":1203},[1063,1960,1501],{"class":1207},[1063,1962,1850],{"class":1203},[1063,1964,1501],{"class":1207},[1063,1966,1855],{"class":1199},[1063,1968,1204],{"class":1214},[1063,1970,1861],{"class":1860},[1063,1972,1864],{"class":1073},[1063,1974,1861],{"class":1860},[1063,1976,1251],{"class":1214},[1063,1978,1979],{"class":1065,"line":1555},[1063,1980,1981],{"class":1207},"  }\n",[1063,1983,1984,1986],{"class":1065,"line":1560},[1063,1985,1248],{"class":1207},[1063,1987,1251],{"class":1203},[1063,1989,1991],{"class":1065,"line":1990},11,[1063,1992,1523],{"emptyLinePlaceholder":1522},[1063,1994,1996],{"class":1065,"line":1995},12,[1063,1997,1529],{"class":1484},[1063,1999,2001,2004,2006,2009,2011,2013],{"class":1065,"line":2000},13,[1063,2002,2003],{"class":1199},"addVitePlugin",[1063,2005,1204],{"class":1203},[1063,2007,2008],{"class":1207},"()",[1063,2010,1833],{"class":1832},[1063,2012,1537],{"class":1203},[1063,2014,1208],{"class":1207},[1063,2016,2018,2021,2023,2026,2029,2031],{"class":1065,"line":2017},14,[1063,2019,2020],{"class":1214},"  name",[1063,2022,1218],{"class":1207},[1063,2024,2025],{"class":1860}," '",[1063,2027,2028],{"class":1073},"my-plugin",[1063,2030,1861],{"class":1860},[1063,2032,1236],{"class":1207},[1063,2034,2036,2039,2041,2043,2045],{"class":1065,"line":2035},15,[1063,2037,1840],{"class":2038},"syA7L",[1063,2040,1537],{"class":1207},[1063,2042,1751],{"class":1826},[1063,2044,1829],{"class":1207},[1063,2046,1221],{"class":1207},[1063,2048,2050],{"class":1065,"line":2049},16,[1063,2051,2052],{"class":1484},"    \u002F\u002F 你可以在这里设置全局 vite 配置\n",[1063,2054,2056],{"class":1065,"line":2055},17,[1063,2057,1242],{"class":1207},[1063,2059,2061,2064,2066,2068,2070],{"class":1065,"line":2060},18,[1063,2062,2063],{"class":2038},"  configResolved",[1063,2065,1537],{"class":1207},[1063,2067,1751],{"class":1826},[1063,2069,1829],{"class":1207},[1063,2071,1221],{"class":1207},[1063,2073,2075],{"class":1065,"line":2074},19,[1063,2076,2077],{"class":1484},"    \u002F\u002F 你可以在这里访问完全解析的 vite 配置\n",[1063,2079,2081],{"class":1065,"line":2080},20,[1063,2082,1242],{"class":1207},[1063,2084,2086,2089,2091,2094,2096,2099,2101],{"class":1065,"line":2085},21,[1063,2087,2088],{"class":2038},"  configEnvironment",[1063,2090,1537],{"class":1207},[1063,2092,2093],{"class":1826},"name",[1063,2095,1916],{"class":1207},[1063,2097,2098],{"class":1826}," config",[1063,2100,1829],{"class":1207},[1063,2102,1221],{"class":1207},[1063,2104,2106],{"class":1065,"line":2105},22,[1063,2107,2108],{"class":1484},"    \u002F\u002F 你可以在这里设置环境特定的 vite 配置\n",[1063,2110,2112,2115,2117,2119,2123,2125,2127,2129,2131],{"class":1065,"line":2111},23,[1063,2113,2114],{"class":1192},"    if",[1063,2116,1537],{"class":1214},[1063,2118,2093],{"class":1203},[1063,2120,2122],{"class":2121},"sXPRQ"," ===",[1063,2124,2025],{"class":1860},[1063,2126,1448],{"class":1073},[1063,2128,1861],{"class":1860},[1063,2130,1947],{"class":1214},[1063,2132,1208],{"class":1207},[1063,2134,2136,2139,2141,2143,2146],{"class":1065,"line":2135},24,[1063,2137,2138],{"class":1203},"      config",[1063,2140,1501],{"class":1207},[1063,2142,1845],{"class":1203},[1063,2144,2145],{"class":2121}," ||=",[1063,2147,2148],{"class":1207}," {}\n",[1063,2150,2152,2154,2156,2158,2160,2162,2164],{"class":1065,"line":2151},25,[1063,2153,2138],{"class":1203},[1063,2155,1501],{"class":1207},[1063,2157,1845],{"class":1203},[1063,2159,1501],{"class":1207},[1063,2161,1850],{"class":1203},[1063,2163,2145],{"class":2121},[1063,2165,2166],{"class":1214}," []\n",[1063,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192],{"class":1065,"line":2169},26,[1063,2171,2138],{"class":1203},[1063,2173,1501],{"class":1207},[1063,2175,1845],{"class":1203},[1063,2177,1501],{"class":1207},[1063,2179,1850],{"class":1203},[1063,2181,1501],{"class":1207},[1063,2183,1855],{"class":1199},[1063,2185,1204],{"class":1214},[1063,2187,1861],{"class":1860},[1063,2189,1864],{"class":1073},[1063,2191,1861],{"class":1860},[1063,2193,1251],{"class":1214},[1063,2195,2197],{"class":1065,"line":2196},27,[1063,2198,2199],{"class":1207},"    }\n",[1063,2201,2203],{"class":1065,"line":2202},28,[1063,2204,1242],{"class":1207},[1063,2206,2208,2211,2213,2216,2218],{"class":1065,"line":2207},29,[1063,2209,2210],{"class":2038},"  applyToEnvironment",[1063,2212,1537],{"class":1207},[1063,2214,2215],{"class":1826},"environment",[1063,2217,1829],{"class":1207},[1063,2219,1221],{"class":1207},[1063,2221,2223,2226,2229,2231,2233,2235,2237,2239],{"class":1065,"line":2222},30,[1063,2224,2225],{"class":1192},"    return",[1063,2227,2228],{"class":1203}," environment",[1063,2230,1501],{"class":1207},[1063,2232,2093],{"class":1203},[1063,2234,2122],{"class":2121},[1063,2236,2025],{"class":1860},[1063,2238,1448],{"class":1073},[1063,2240,2241],{"class":1860},"'\n",[1063,2243,2245],{"class":1065,"line":2244},31,[1063,2246,1242],{"class":1207},[1063,2248,2250,2252],{"class":1065,"line":2249},32,[1063,2251,1248],{"class":1207},[1063,2253,2254],{"class":1203},"))\n",[1793,2256,2258],{"id":2257},"_2-迁移-vite-插件以使用环境","2. 迁移 Vite 插件以使用环境",[1034,2260,2261,2262,1744,2264,2266,2267,2269,2270,2273],{},"与其使用带有 ",[1046,2263,1743],{},[1046,2265,1747],{}," 的 ",[1046,2268,2003],{},"，你可以在插件中使用新的 ",[1046,2271,2272],{},"applyToEnvironment"," 钩子。",[1054,2275,2277],{"className":1182,"code":2276,"language":1184,"meta":354,"style":354},"\u002F\u002F 之前\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    config.optimizeDeps.include.push('my-package')\n  },\n}), { client: false })\n\n\u002F\u002F 之后\naddVitePlugin(() => ({\n  name: 'my-plugin',\n  config (config) {\n    \u002F\u002F 你可以在这里设置全局 vite 配置\n  },\n  configResolved (config) {\n    \u002F\u002F 你可以在这里访问完全解析的 vite 配置\n  },\n  configEnvironment (name, config) {\n    \u002F\u002F 你可以在这里设置环境特定的 vite 配置\n    if (name === 'client') {\n      config.optimizeDeps ||= {}\n      config.optimizeDeps.include ||= []\n      config.optimizeDeps.include.push('my-package')\n    }\n  },\n  applyToEnvironment (environment) {\n    return environment.name === 'client'\n  },\n}))\n",[1046,2278,2279,2283,2297,2311,2323,2349,2353,2374,2378,2382,2396,2410,2422,2426,2430,2442,2446,2450,2466,2470,2490,2502,2518,2544,2548,2552,2564,2582,2586],{"__ignoreMap":354},[1063,2280,2281],{"class":1065,"line":1066},[1063,2282,1485],{"class":1484},[1063,2284,2285,2287,2289,2291,2293,2295],{"class":1065,"line":1211},[1063,2286,2003],{"class":1199},[1063,2288,1204],{"class":1203},[1063,2290,2008],{"class":1207},[1063,2292,1833],{"class":1832},[1063,2294,1537],{"class":1203},[1063,2296,1208],{"class":1207},[1063,2298,2299,2301,2303,2305,2307,2309],{"class":1065,"line":1224},[1063,2300,2020],{"class":1214},[1063,2302,1218],{"class":1207},[1063,2304,2025],{"class":1860},[1063,2306,2028],{"class":1073},[1063,2308,1861],{"class":1860},[1063,2310,1236],{"class":1207},[1063,2312,2313,2315,2317,2319,2321],{"class":1065,"line":1239},[1063,2314,1840],{"class":2038},[1063,2316,1537],{"class":1207},[1063,2318,1751],{"class":1826},[1063,2320,1829],{"class":1207},[1063,2322,1221],{"class":1207},[1063,2324,2325,2327,2329,2331,2333,2335,2337,2339,2341,2343,2345,2347],{"class":1065,"line":1245},[1063,2326,1954],{"class":1203},[1063,2328,1501],{"class":1207},[1063,2330,1845],{"class":1203},[1063,2332,1501],{"class":1207},[1063,2334,1850],{"class":1203},[1063,2336,1501],{"class":1207},[1063,2338,1855],{"class":1199},[1063,2340,1204],{"class":1214},[1063,2342,1861],{"class":1860},[1063,2344,1864],{"class":1073},[1063,2346,1861],{"class":1860},[1063,2348,1251],{"class":1214},[1063,2350,2351],{"class":1065,"line":1519},[1063,2352,1242],{"class":1207},[1063,2354,2355,2357,2359,2361,2363,2366,2368,2370,2372],{"class":1065,"line":1526},[1063,2356,1248],{"class":1207},[1063,2358,1829],{"class":1203},[1063,2360,1916],{"class":1207},[1063,2362,1876],{"class":1207},[1063,2364,2365],{"class":1214}," client",[1063,2367,1218],{"class":1207},[1063,2369,1652],{"class":1651},[1063,2371,1886],{"class":1207},[1063,2373,1251],{"class":1203},[1063,2375,2376],{"class":1065,"line":1532},[1063,2377,1523],{"emptyLinePlaceholder":1522},[1063,2379,2380],{"class":1065,"line":1555},[1063,2381,1529],{"class":1484},[1063,2383,2384,2386,2388,2390,2392,2394],{"class":1065,"line":1560},[1063,2385,2003],{"class":1199},[1063,2387,1204],{"class":1203},[1063,2389,2008],{"class":1207},[1063,2391,1833],{"class":1832},[1063,2393,1537],{"class":1203},[1063,2395,1208],{"class":1207},[1063,2397,2398,2400,2402,2404,2406,2408],{"class":1065,"line":1990},[1063,2399,2020],{"class":1214},[1063,2401,1218],{"class":1207},[1063,2403,2025],{"class":1860},[1063,2405,2028],{"class":1073},[1063,2407,1861],{"class":1860},[1063,2409,1236],{"class":1207},[1063,2411,2412,2414,2416,2418,2420],{"class":1065,"line":1995},[1063,2413,1840],{"class":2038},[1063,2415,1537],{"class":1207},[1063,2417,1751],{"class":1826},[1063,2419,1829],{"class":1207},[1063,2421,1221],{"class":1207},[1063,2423,2424],{"class":1065,"line":2000},[1063,2425,2052],{"class":1484},[1063,2427,2428],{"class":1065,"line":2017},[1063,2429,1242],{"class":1207},[1063,2431,2432,2434,2436,2438,2440],{"class":1065,"line":2035},[1063,2433,2063],{"class":2038},[1063,2435,1537],{"class":1207},[1063,2437,1751],{"class":1826},[1063,2439,1829],{"class":1207},[1063,2441,1221],{"class":1207},[1063,2443,2444],{"class":1065,"line":2049},[1063,2445,2077],{"class":1484},[1063,2447,2448],{"class":1065,"line":2055},[1063,2449,1242],{"class":1207},[1063,2451,2452,2454,2456,2458,2460,2462,2464],{"class":1065,"line":2060},[1063,2453,2088],{"class":2038},[1063,2455,1537],{"class":1207},[1063,2457,2093],{"class":1826},[1063,2459,1916],{"class":1207},[1063,2461,2098],{"class":1826},[1063,2463,1829],{"class":1207},[1063,2465,1221],{"class":1207},[1063,2467,2468],{"class":1065,"line":2074},[1063,2469,2108],{"class":1484},[1063,2471,2472,2474,2476,2478,2480,2482,2484,2486,2488],{"class":1065,"line":2080},[1063,2473,2114],{"class":1192},[1063,2475,1537],{"class":1214},[1063,2477,2093],{"class":1203},[1063,2479,2122],{"class":2121},[1063,2481,2025],{"class":1860},[1063,2483,1448],{"class":1073},[1063,2485,1861],{"class":1860},[1063,2487,1947],{"class":1214},[1063,2489,1208],{"class":1207},[1063,2491,2492,2494,2496,2498,2500],{"class":1065,"line":2085},[1063,2493,2138],{"class":1203},[1063,2495,1501],{"class":1207},[1063,2497,1845],{"class":1203},[1063,2499,2145],{"class":2121},[1063,2501,2148],{"class":1207},[1063,2503,2504,2506,2508,2510,2512,2514,2516],{"class":1065,"line":2105},[1063,2505,2138],{"class":1203},[1063,2507,1501],{"class":1207},[1063,2509,1845],{"class":1203},[1063,2511,1501],{"class":1207},[1063,2513,1850],{"class":1203},[1063,2515,2145],{"class":2121},[1063,2517,2166],{"class":1214},[1063,2519,2520,2522,2524,2526,2528,2530,2532,2534,2536,2538,2540,2542],{"class":1065,"line":2111},[1063,2521,2138],{"class":1203},[1063,2523,1501],{"class":1207},[1063,2525,1845],{"class":1203},[1063,2527,1501],{"class":1207},[1063,2529,1850],{"class":1203},[1063,2531,1501],{"class":1207},[1063,2533,1855],{"class":1199},[1063,2535,1204],{"class":1214},[1063,2537,1861],{"class":1860},[1063,2539,1864],{"class":1073},[1063,2541,1861],{"class":1860},[1063,2543,1251],{"class":1214},[1063,2545,2546],{"class":1065,"line":2135},[1063,2547,2199],{"class":1207},[1063,2549,2550],{"class":1065,"line":2151},[1063,2551,1242],{"class":1207},[1063,2553,2554,2556,2558,2560,2562],{"class":1065,"line":2169},[1063,2555,2210],{"class":2038},[1063,2557,1537],{"class":1207},[1063,2559,2215],{"class":1826},[1063,2561,1829],{"class":1207},[1063,2563,1221],{"class":1207},[1063,2565,2566,2568,2570,2572,2574,2576,2578,2580],{"class":1065,"line":2196},[1063,2567,2225],{"class":1192},[1063,2569,2228],{"class":1203},[1063,2571,1501],{"class":1207},[1063,2573,2093],{"class":1203},[1063,2575,2122],{"class":2121},[1063,2577,2025],{"class":1860},[1063,2579,1448],{"class":1073},[1063,2581,2241],{"class":1860},[1063,2583,2584],{"class":1065,"line":2202},[1063,2585,1242],{"class":1207},[1063,2587,2588,2590],{"class":1065,"line":2207},[1063,2589,1248],{"class":1207},[1063,2591,2254],{"class":1203},[2593,2594,2596],"read-more",{"target":2595,"to":1687},"_blank",[1034,2597,2598],{},"了解更多关于 Vite 的 Environment API",[1029,2600,2602],{"id":2601},"迁移到-vite-8migration-to-vite-8","迁移到 Vite 8（Migration to Vite 8）",[1034,2604,1426,2605,1678],{},[1158,2606,1429],{},[1432,2608,1435],{"id":2609},"变更内容what-changed-3",[1034,2611,2612,2613,2618,2619,2624],{},"Nuxt 5 从 Vite 7 升级到 ",[1038,2614,2617],{"href":2615,"rel":2616},"https:\u002F\u002Fmain.vite.dev\u002Fguide\u002Fmigration",[1042],"Vite 8","，后者使用 ",[1038,2620,2623],{"href":2621,"rel":2622},"https:\u002F\u002Frolldown.rs",[1042],"Rolldown"," 取代了 esbuild 和 Rollup 作为底层打包器。这带来了显著更快的构建，但也包含若干破坏性变更。",[1406,2626,2627],{},[1034,2628,2629,2630,2632,2633,2635,2636,2639],{},"与 Vite Environment API 迁移不同，此变更无法通过 ",[1046,2631,1413],{}," 提前选择加入。如果你想提前测试 Vite 8 兼容性，可以在 ",[1046,2634,178],{}," 中添加 ",[1046,2637,2638],{},"\"vite\": \"^8.0.0-beta.15\""," 解析覆盖。",[1034,2641,2642],{},"大部分迁移由 Nuxt 内部处理，但有一些需要注意的面向用户的变更：",[1263,2644,2645,2663,2673],{},[1266,2646,2647,2655,2656,1454,2659,2662],{},[1158,2648,2649,1454,2652],{},[1046,2650,2651],{},"vite.esbuild",[1046,2653,2654],{},"vite.optimizeDeps.esbuildOptions"," 已弃用，改用 ",[1046,2657,2658],{},"vite.oxc",[1046,2660,2661],{},"vite.optimizeDeps.rolldownOptions","。Vite 8 目前会自动转换这些，但将来会被移除。",[1266,2664,2665,2655,2670,1172],{},[1158,2666,2667],{},[1046,2668,2669],{},"build.rollupOptions",[1046,2671,2672],{},"build.rolldownOptions",[1266,2674,2675,2678,2679,2684],{},[1158,2676,2677],{},"CommonJS 互操作行为","已改变。如果你导入 CJS 模块，请查看 ",[1038,2680,2683],{"href":2681,"rel":2682},"https:\u002F\u002Fmain.vite.dev\u002Fguide\u002Fmigration#consistent-commonjs-interop",[1042],"Vite 8 迁移指南"," 了解详情。",[2593,2686,2687],{"target":2595,"to":2615},[1034,2688,2689],{},"查看完整的 Vite 8 迁移指南，了解所有破坏性变更和迁移步骤。",[1029,2691,2693],{"id":2692},"迁移到-nitro-v3migration-to-nitro-v3","迁移到 Nitro v3（Migration to Nitro v3）",[1034,2695,1426,2696,2698],{},[1158,2697,1429],{},"：重大",[1432,2700,1435],{"id":2701},"变更内容what-changed-4",[1034,2703,2704,2705,2710,2711,1454,2716,2721,2722,2725,2726,2729],{},"Nuxt 5 升级到 ",[1038,2706,2709],{"href":2707,"rel":2708},"https:\u002F\u002Fnitro.build\u002Fblog\u002Fv3-beta",[1042],"Nitro v3","，这是服务端引擎的一次重大重写。Nitro v3 构建于 ",[1038,2712,2715],{"href":2713,"rel":2714},"https:\u002F\u002Fsrvx.h3.dev",[1042],"srvx",[1038,2717,2720],{"href":2718,"rel":2719},"https:\u002F\u002Fh3.dev",[1042],"h3 v2"," 之上，全面采用 Web 标准 ",[1046,2723,2724],{},"Request","\u002F",[1046,2727,2728],{},"Response"," API。这带来了性能改进和更一致的 API，但也包含对服务端代码的若干破坏性变更。",[2731,2732,2733],"important",{},[1034,2734,2735],{},"我们仍在处理 Nitro v3 的集成，所以你应该预期会有进一步的变更，以及为使迁移更直接所做的额外工作。",[2593,2737,2738],{"target":2595,"to":2707},[1034,2739,2740],{},"阅读 Nitro v3 beta 公告以了解全貌。",[2593,2742,2744],{"target":2595,"to":2743},"https:\u002F\u002Fnitro.build\u002Fdocs\u002Fmigration",[1034,2745,2746],{},"查看完整的 Nitro v3 迁移指南，了解所有破坏性变更。",[1034,2748,2749],{},"以下小节重点介绍与 Nuxt 应用开发者和模块作者最相关的变更。",[1432,2751,2753],{"id":2752},"包与导入路径变更package-and-import-path-changes","包与导入路径变更（Package and Import Path Changes）",[1034,2755,2756,2759,2760,2763],{},[1046,2757,2758],{},"nitropack"," 包已重命名为 ",[1046,2761,2762],{},"nitro","。所有导入路径都已改变：",[2765,2766,2767,2780],"table",{},[2768,2769,2770],"thead",{},[2771,2772,2773,2777],"tr",{},[2774,2775,2776],"th",{},"之前（Before）",[2774,2778,2779],{},"之后（After）",[2781,2782,2783,2794,2806,2817],"tbody",{},[2771,2784,2785,2790],{},[2786,2787,2788],"td",{},[1046,2789,2758],{},[2786,2791,2792],{},[1046,2793,2762],{},[2771,2795,2796,2801],{},[2786,2797,2798],{},[1046,2799,2800],{},"nitropack\u002Ftypes",[2786,2802,2803],{},[1046,2804,2805],{},"nitro\u002Ftypes",[2771,2807,2808,2813],{},[2786,2809,2810],{},[1046,2811,2812],{},"nitropack\u002Fruntime",[2786,2814,2815],{},[1046,2816,2762],{},[2771,2818,2819,2824],{},[2786,2820,2821,2823],{},[1046,2822,1029],{},"（用于服务端工具）",[2786,2825,2826],{},[1046,2827,2828],{},"nitro\u002Fh3",[1034,2830,2831,2832,1445,2835,1445,2838,1445,2841,2843],{},"服务端路由中的自动导入（",[1046,2833,2834],{},"defineEventHandler",[1046,2836,2837],{},"getQuery",[1046,2839,2840],{},"readBody",[1046,2842,533],{}," 等）继续工作，无需更改。",[1034,2845,2846],{},"如果你在服务端代码中有显式导入，请更新它们：",[1054,2848,2852],{"className":2849,"code":2850,"language":2851,"meta":354,"style":354},"language-diff shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","- import { defineEventHandler, getQuery } from 'h3'\n+ import { defineEventHandler, getQuery } from 'nitro\u002Fh3'\n","diff",[1046,2853,2854,2859],{"__ignoreMap":354},[1063,2855,2856],{"class":1065,"line":1066},[1063,2857,2858],{},"- import { defineEventHandler, getQuery } from 'h3'\n",[1063,2860,2861],{"class":1065,"line":1211},[1063,2862,2863],{},"+ import { defineEventHandler, getQuery } from 'nitro\u002Fh3'\n",[1034,2865,2866,2869],{},[1158,2867,2868],{},"对于模块作者","，类型增强必须指向新的模块路径：",[1054,2871,2873],{"className":2849,"code":2872,"language":2851,"meta":354,"style":354},"- declare module 'nitropack\u002Ftypes' {\n+ declare module 'nitro\u002Ftypes' {\n    interface NitroRouteRules {\n      myModule?: { \u002F* ... *\u002F }\n    }\n  }\n",[1046,2874,2875,2880,2885,2890,2895,2899],{"__ignoreMap":354},[1063,2876,2877],{"class":1065,"line":1066},[1063,2878,2879],{},"- declare module 'nitropack\u002Ftypes' {\n",[1063,2881,2882],{"class":1065,"line":1211},[1063,2883,2884],{},"+ declare module 'nitro\u002Ftypes' {\n",[1063,2886,2887],{"class":1065,"line":1224},[1063,2888,2889],{},"    interface NitroRouteRules {\n",[1063,2891,2892],{"class":1065,"line":1239},[1063,2893,2894],{},"      myModule?: { \u002F* ... *\u002F }\n",[1063,2896,2897],{"class":1065,"line":1245},[1063,2898,2199],{},[1063,2900,2901],{"class":1065,"line":1519},[1063,2902,1981],{},[1432,2904,2906,2907,2725,2910,2913,2914,2725,2917],{"id":2905},"错误处理statusstatustext-取代-statuscodestatusmessage","错误处理：",[1046,2908,2909],{},"status",[1046,2911,2912],{},"statusText"," 取代 ",[1046,2915,2916],{},"statusCode",[1046,2918,2919],{},"statusMessage",[1034,2921,2922],{},"h3 v2 重命名了错误属性以与 Web 标准对齐：",[1054,2924,2926],{"className":2849,"code":2925,"language":2851,"meta":354,"style":354},"  createError({\n-   statusCode: 404,\n-   statusMessage: 'Not Found',\n+   status: 404,\n+   statusText: 'Not Found',\n  })\n",[1046,2927,2928,2933,2938,2943,2948,2953],{"__ignoreMap":354},[1063,2929,2930],{"class":1065,"line":1066},[1063,2931,2932],{},"  createError({\n",[1063,2934,2935],{"class":1065,"line":1211},[1063,2936,2937],{},"-   statusCode: 404,\n",[1063,2939,2940],{"class":1065,"line":1224},[1063,2941,2942],{},"-   statusMessage: 'Not Found',\n",[1063,2944,2945],{"class":1065,"line":1239},[1063,2946,2947],{},"+   status: 404,\n",[1063,2949,2950],{"class":1065,"line":1245},[1063,2951,2952],{},"+   statusText: 'Not Found',\n",[1063,2954,2955],{"class":1065,"line":1519},[1063,2956,2957],{},"  })\n",[1034,2959,2960,2961,2964,2965,2266,2967,2969],{},"在服务端路由中，错误类现在是 ",[1046,2962,2963],{},"HTTPError","（取代了来自 ",[1046,2966,1029],{},[1046,2968,581],{},"）：",[1054,2971,2973],{"className":2849,"code":2972,"language":2851,"meta":354,"style":354},"- import { createError } from 'h3'\n+ import { HTTPError } from 'nitro\u002Fh3'\n\n  export default defineEventHandler(() => {\n-   throw createError({ statusCode: 400, statusMessage: 'Bad request' })\n+   throw new HTTPError({ status: 400, statusText: 'Bad request' })\n  })\n",[1046,2974,2975,2980,2985,2989,2994,2999,3004],{"__ignoreMap":354},[1063,2976,2977],{"class":1065,"line":1066},[1063,2978,2979],{},"- import { createError } from 'h3'\n",[1063,2981,2982],{"class":1065,"line":1211},[1063,2983,2984],{},"+ import { HTTPError } from 'nitro\u002Fh3'\n",[1063,2986,2987],{"class":1065,"line":1224},[1063,2988,1523],{"emptyLinePlaceholder":1522},[1063,2990,2991],{"class":1065,"line":1239},[1063,2992,2993],{},"  export default defineEventHandler(() => {\n",[1063,2995,2996],{"class":1065,"line":1245},[1063,2997,2998],{},"-   throw createError({ statusCode: 400, statusMessage: 'Bad request' })\n",[1063,3000,3001],{"class":1065,"line":1519},[1063,3002,3003],{},"+   throw new HTTPError({ status: 400, statusText: 'Bad request' })\n",[1063,3005,3006],{"class":1065,"line":1526},[1063,3007,2957],{},[1406,3009,3010],{},[1034,3011,3012,3013,3016,3017,3019],{},"在你应用的 Vue 部分（即 ",[1046,3014,3015],{},"app\u002F"," 目录），Nuxt 的 ",[1046,3018,581],{}," composable 继续工作，并且是抛出错误的推荐方式。",[1432,3021,3023],{"id":3022},"服务端事件-api-变更h3-v2","服务端事件 API 变更（h3 v2）",[1034,3025,3026,3029],{},[1046,3027,3028],{},"H3Event"," 对象现在使用 Web 标准 API：",[1034,3031,3032],{},[1158,3033,3034],{},"请求属性：",[1054,3036,3038],{"className":2849,"code":3037,"language":2851,"meta":354,"style":354},"- event.path              \u002F\u002F string\n+ event.url.pathname      \u002F\u002F URL 对象 - 使用 .pathname、.search、.hash\n\n- event.method            \u002F\u002F string\n+ event.req.method        \u002F\u002F 通过 Web Request 对象\n\n- event.node.req.headers  \u002F\u002F Node.js IncomingHttpHeaders\n+ event.req.headers       \u002F\u002F Web Headers API（.get()、.set()、.has()）\n",[1046,3039,3040,3045,3050,3054,3059,3064,3068,3073],{"__ignoreMap":354},[1063,3041,3042],{"class":1065,"line":1066},[1063,3043,3044],{},"- event.path              \u002F\u002F string\n",[1063,3046,3047],{"class":1065,"line":1211},[1063,3048,3049],{},"+ event.url.pathname      \u002F\u002F URL 对象 - 使用 .pathname、.search、.hash\n",[1063,3051,3052],{"class":1065,"line":1224},[1063,3053,1523],{"emptyLinePlaceholder":1522},[1063,3055,3056],{"class":1065,"line":1239},[1063,3057,3058],{},"- event.method            \u002F\u002F string\n",[1063,3060,3061],{"class":1065,"line":1245},[1063,3062,3063],{},"+ event.req.method        \u002F\u002F 通过 Web Request 对象\n",[1063,3065,3066],{"class":1065,"line":1519},[1063,3067,1523],{"emptyLinePlaceholder":1522},[1063,3069,3070],{"class":1065,"line":1526},[1063,3071,3072],{},"- event.node.req.headers  \u002F\u002F Node.js IncomingHttpHeaders\n",[1063,3074,3075],{"class":1065,"line":1532},[1063,3076,3077],{},"+ event.req.headers       \u002F\u002F Web Headers API（.get()、.set()、.has()）\n",[1034,3079,3080],{},[1158,3081,3082],{},"响应属性：",[1054,3084,3086],{"className":2849,"code":3085,"language":2851,"meta":354,"style":354},"- event.node.res.statusCode = 200\n+ event.res.status = 200\n\n- event.node.res.statusMessage = 'OK'\n+ event.res.statusText = 'OK'\n\n- setResponseHeader(event, 'x-custom', 'value')\n+ event.res.headers.set('x-custom', 'value')\n\n- appendResponseHeader(event, 'set-cookie', cookie)\n+ event.res.headers.append('set-cookie', cookie)\n",[1046,3087,3088,3093,3098,3102,3107,3112,3116,3121,3126,3130,3135],{"__ignoreMap":354},[1063,3089,3090],{"class":1065,"line":1066},[1063,3091,3092],{},"- event.node.res.statusCode = 200\n",[1063,3094,3095],{"class":1065,"line":1211},[1063,3096,3097],{},"+ event.res.status = 200\n",[1063,3099,3100],{"class":1065,"line":1224},[1063,3101,1523],{"emptyLinePlaceholder":1522},[1063,3103,3104],{"class":1065,"line":1239},[1063,3105,3106],{},"- event.node.res.statusMessage = 'OK'\n",[1063,3108,3109],{"class":1065,"line":1245},[1063,3110,3111],{},"+ event.res.statusText = 'OK'\n",[1063,3113,3114],{"class":1065,"line":1519},[1063,3115,1523],{"emptyLinePlaceholder":1522},[1063,3117,3118],{"class":1065,"line":1526},[1063,3119,3120],{},"- setResponseHeader(event, 'x-custom', 'value')\n",[1063,3122,3123],{"class":1065,"line":1532},[1063,3124,3125],{},"+ event.res.headers.set('x-custom', 'value')\n",[1063,3127,3128],{"class":1065,"line":1555},[1063,3129,1523],{"emptyLinePlaceholder":1522},[1063,3131,3132],{"class":1065,"line":1560},[1063,3133,3134],{},"- appendResponseHeader(event, 'set-cookie', cookie)\n",[1063,3136,3137],{"class":1065,"line":1990},[1063,3138,3139],{},"+ event.res.headers.append('set-cookie', cookie)\n",[1432,3141,3143,3146,3147],{"id":3142},"useruntimeconfig-不再接受-event",[1046,3144,3145],{},"useRuntimeConfig()"," 不再接受 ",[1046,3148,3149],{},"event",[1034,3151,3152,3153,3155,3156,3158],{},"在 Nitro v3 中，",[1046,3154,3145],{}," 在服务端路由中不再需要（或接受）",[1046,3157,3149],{}," 参数：",[1054,3160,3162],{"className":2849,"code":3161,"language":2851,"meta":354,"style":354},"  export default defineEventHandler((event) => {\n-   const config = useRuntimeConfig(event)\n+   const config = useRuntimeConfig()\n  })\n",[1046,3163,3164,3169,3174,3179],{"__ignoreMap":354},[1063,3165,3166],{"class":1065,"line":1066},[1063,3167,3168],{},"  export default defineEventHandler((event) => {\n",[1063,3170,3171],{"class":1065,"line":1211},[1063,3172,3173],{},"-   const config = useRuntimeConfig(event)\n",[1063,3175,3176],{"class":1065,"line":1224},[1063,3177,3178],{},"+   const config = useRuntimeConfig()\n",[1063,3180,3181],{"class":1065,"line":1239},[1063,3182,2957],{},[1432,3184,3186,3187,3189,3190],{"id":3185},"路由规则statuscode-重命名为-status","路由规则：",[1046,3188,2916],{}," 重命名为 ",[1046,3191,2909],{},[1034,3193,3194],{},"如果你定义了重定向路由规则，属性名已改变：",[1054,3196,3198],{"className":2849,"code":3197,"language":2851,"meta":354,"style":354},"  export default defineNuxtConfig({\n    routeRules: {\n      '\u002Fold-page': {\n-       redirect: { to: '\u002Fnew-page', statusCode: 302 },\n+       redirect: { to: '\u002Fnew-page', status: 302 },\n      },\n    },\n  })\n",[1046,3199,3200,3205,3210,3215,3220,3225,3230,3234],{"__ignoreMap":354},[1063,3201,3202],{"class":1065,"line":1066},[1063,3203,3204],{},"  export default defineNuxtConfig({\n",[1063,3206,3207],{"class":1065,"line":1211},[1063,3208,3209],{},"    routeRules: {\n",[1063,3211,3212],{"class":1065,"line":1224},[1063,3213,3214],{},"      '\u002Fold-page': {\n",[1063,3216,3217],{"class":1065,"line":1239},[1063,3218,3219],{},"-       redirect: { to: '\u002Fnew-page', statusCode: 302 },\n",[1063,3221,3222],{"class":1065,"line":1245},[1063,3223,3224],{},"+       redirect: { to: '\u002Fnew-page', status: 302 },\n",[1063,3226,3227],{"class":1065,"line":1519},[1063,3228,3229],{},"      },\n",[1063,3231,3232],{"class":1065,"line":1526},[1063,3233,1659],{},[1063,3235,3236],{"class":1065,"line":1532},[1063,3237,2957],{},[1432,3239,3241],{"id":3240},"对于模块作者其他变更additional-changes","对于模块作者：其他变更（Additional Changes）",[1263,3243,3244,3254,3270],{},[1266,3245,3246,3249,3250,3253],{},[1158,3247,3248],{},"Nitro 插件导入","：使用 ",[1046,3251,3252],{},"import { definePlugin } from 'nitro'"," 进行显式导入（自动导入仍然工作）。",[1266,3255,3256,1309,3259,1454,3262,3265,3266,3269],{},[1158,3257,3258],{},"运行时钩子",[1046,3260,3261],{},"nitroApp.hooks.hook('beforeResponse', ...)",[1046,3263,3264],{},"nitroApp.hooks.hook('afterResponse', ...)"," 已被 ",[1046,3267,3268],{},"nitroApp.hooks.hook('response', ...)"," 取代。",[1266,3271,3272,3281,3282,3285,3286,3289,3290,1172],{},[1158,3273,3274,3275,2266,3278],{},"来自 ",[1046,3276,3277],{},"nitro\u002Fapp",[1046,3279,3280],{},"getRouteRules()","：在服务端，Nitro 辅助函数从 ",[1046,3283,3284],{},"getRouteRules(event)"," 变为 ",[1046,3287,3288],{},"getRouteRules(method, pathname)","，返回 ",[1046,3291,3292],{},"{ routeRules }",[1029,3294,3296,3297],{"id":3295},"移除-experimentalexternalvue","移除 ",[1046,3298,3299],{},"experimental.externalVue",[1034,3301,1426,3302,1430],{},[1158,3303,1429],{},[1432,3305,1435],{"id":3306},"变更内容what-changed-5",[1034,3308,3309,3311,3312,3315,3316,1445,3319,1445,3322,1445,3325,1445,3328,3331],{},[1046,3310,3299],{}," 选项已被移除。当未启用 ",[1046,3313,3314],{},"vue.runtimeCompiler"," 时，Vue 编译器依赖项（",[1046,3317,3318],{},"@babel\u002Fparser",[1046,3320,3321],{},"@vue\u002Fcompiler-core",[1046,3323,3324],{},"@vue\u002Fcompiler-dom",[1046,3326,3327],{},"@vue\u002Fcompiler-ssr",[1046,3329,3330],{},"estree-walker","）现在在服务端 bundle 中始终被替换为 mock 代理。",[1432,3333,1771],{"id":3334},"变更原因reasons-for-change-1",[1034,3336,3337,3338,3340,3341,3344],{},"随着向 Nitro v3 迁移，所有依赖项默认会被打包进服务端输出（不像 Nitro v2 将 ",[1046,3339,142],{}," 外置）。",[1046,3342,3343],{},"externalVue"," 选项最初设计用于将 Vue 保留为外部依赖，这是为了避免将多个 Vue 副本打包进去所必需的，但由于 Nitro v3 无论如何都会打包所有内容，该选项变成了空操作（no-op）。",[1034,3346,3347,3348,3350,3351,3353],{},"Vue 的服务端构建包含完整的编译器工具链，会将 ",[1046,3349,3318],{},"（465KB）和其他编译器包不必要地拉入服务端 bundle。这些编译器包仅在启用 ",[1046,3352,3314],{}," 进行运行时模板编译时才需要。",[1034,3355,3356],{},"通过始终 mock 这些编译器依赖，默认的服务端 bundle 体积减少了约 860KB（约 59%）。",[1432,3358,1471],{"id":3359},"迁移步骤migration-steps-3",[1034,3361,3362,3363,3365],{},"如果你之前显式设置了 ",[1046,3364,3299],{},"，现在应该移除它。",[1054,3367,3369],{"className":2849,"code":3368,"language":2851,"meta":354,"style":354},"  export default defineNuxtConfig({\n    experimental: {\n-     externalVue: false,\n    },\n  })\n",[1046,3370,3371,3375,3380,3385,3389],{"__ignoreMap":354},[1063,3372,3373],{"class":1065,"line":1066},[1063,3374,3204],{},[1063,3376,3377],{"class":1065,"line":1211},[1063,3378,3379],{},"    experimental: {\n",[1063,3381,3382],{"class":1065,"line":1224},[1063,3383,3384],{},"-     externalVue: false,\n",[1063,3386,3387],{"class":1065,"line":1239},[1063,3388,1659],{},[1063,3390,3391],{"class":1065,"line":1245},[1063,3392,2957],{},[1406,3394,3395],{},[1034,3396,3397,3398,3401],{},"如果你使用 ",[1046,3399,3400],{},"vue.runtimeCompiler: true","，真正的编译器包仍会像以前一样被包含。",[1029,3403,3405,3408],{"id":3404},"vitejsplugin-vue-jsx-现在变为可选is-now-optional",[1046,3406,3407],{},"@vitejs\u002Fplugin-vue-jsx"," 现在变为可选（Is Now Optional）",[1034,3410,1426,3411,1430],{},[1158,3412,1429],{},[1432,3414,1435],{"id":3415},"变更内容what-changed-6",[1034,3417,3418,3420,3421,3424,3425,1744,3428,3431],{},[1046,3419,3407],{}," 不再默认随 ",[1046,3422,3423],{},"@nuxt\u002Fvite-builder"," 安装。它现在是一个可选的 peer dependency，仅在构建过程中遇到 ",[1046,3426,3427],{},".jsx",[1046,3429,3430],{},".tsx"," 文件时才按需加载。",[1034,3433,3434],{},"如果你的项目使用 JSX\u002FTSX 组件，Nuxt 会自动检测到，并提示你安装该包。",[1432,3436,1771],{"id":3437},"变更原因reasons-for-change-2",[1034,3439,3440,3442,3443,3446],{},[1046,3441,3407],{}," 插件带来了一个显著的依赖树（Babel、",[1046,3444,3445],{},"@vue\u002Fbabel-plugin-jsx"," 等），对于不使用 JSX 的项目来说是不必要的。将其设为可选可以减小默认安装体积，并加快大多数 Nuxt 项目的依赖解析速度。",[1432,3448,1471],{"id":3449},"迁移步骤migration-steps-4",[1034,3451,3452,3453,1744,3455,3457,3458,3460],{},"如果你的项目使用 ",[1046,3454,3427],{},[1046,3456,3430],{}," 文件，请将 ",[1046,3459,3407],{}," 添加为开发依赖：",[1050,3462,3463,3482,3498,3513],{"sync":1052},[1054,3464,3466],{"className":1056,"code":3465,"filename":1058,"language":1059,"meta":354,"style":354},"npm install -D @vitejs\u002Fplugin-vue-jsx\n",[1046,3467,3468],{"__ignoreMap":354},[1063,3469,3470,3472,3475,3479],{"class":1065,"line":1066},[1063,3471,1058],{"class":1069},[1063,3473,3474],{"class":1073}," install",[1063,3476,3478],{"class":3477},"supr-"," -D",[1063,3480,3481],{"class":1073}," @vitejs\u002Fplugin-vue-jsx\n",[1054,3483,3485],{"className":1056,"code":3484,"filename":1081,"language":1059,"meta":354,"style":354},"yarn add -D @vitejs\u002Fplugin-vue-jsx\n",[1046,3486,3487],{"__ignoreMap":354},[1063,3488,3489,3491,3494,3496],{"class":1065,"line":1066},[1063,3490,1081],{"class":1069},[1063,3492,3493],{"class":1073}," add",[1063,3495,3478],{"class":3477},[1063,3497,3481],{"class":1073},[1054,3499,3501],{"className":1056,"code":3500,"filename":1095,"language":1059,"meta":354,"style":354},"pnpm add -D @vitejs\u002Fplugin-vue-jsx\n",[1046,3502,3503],{"__ignoreMap":354},[1063,3504,3505,3507,3509,3511],{"class":1065,"line":1066},[1063,3506,1095],{"class":1069},[1063,3508,3493],{"class":1073},[1063,3510,3478],{"class":3477},[1063,3512,3481],{"class":1073},[1054,3514,3516],{"className":1056,"code":3515,"filename":1109,"language":1059,"meta":354,"style":354},"bun add -D @vitejs\u002Fplugin-vue-jsx\n",[1046,3517,3518],{"__ignoreMap":354},[1063,3519,3520,3522,3524,3526],{"class":1065,"line":1066},[1063,3521,1109],{"class":1069},[1063,3523,3493],{"class":1073},[1063,3525,3478],{"class":3477},[1063,3527,3481],{"class":1073},[1034,3529,3530],{},"或者，在开发过程中首次处理 JSX\u002FTSX 文件时，Nuxt 会提示你自动安装它。",[1034,3532,3533],{},"如果你的项目不使用 JSX，则无需更改。",[1029,3535,3537,3538,3541,3542,3544],{"id":3536},"移除遗留的-_renderresponse-支持removal-of-legacy-_renderresponse-support","移除遗留的 ",[1046,3539,3540],{},"_renderResponse"," 支持（Removal of Legacy ",[1046,3543,3540],{}," Support）",[1034,3546,1426,3547,1430],{},[1158,3548,1429],{},[1432,3550,1435],{"id":3551},"变更内容what-changed-7",[1034,3553,3554,3555,3558,3559,3562],{},"不再检查 ",[1046,3556,3557],{},"ssrContext._renderResponse"," 作为回退。只有内部的 ",[1046,3560,3561],{},"ssrContext['~renderResponse']","（由 Nuxt 自己的 router composable 设置）会被使用。",[1432,3564,1771],{"id":3565},"变更原因reasons-for-change-3",[1034,3567,1589,3568,3573,3574,3577,3578,3581,3582,3584],{},[1038,3569,3572],{"href":3570,"rel":3571},"https:\u002F\u002Fgithub.com\u002Fnuxt\u002Fnuxt\u002Fpull\u002F33896",[1042],"#33896"," 将内部 API 迁移到 ",[1046,3575,3576],{},"~renderResponse"," 之后，",[1046,3579,3580],{},"ssrContext"," 上的 ",[1046,3583,3540],{}," 属性被保留为向后兼容回退。TODO 注释表明它应在 Nuxt v5 中移除。",[1432,3586,1471],{"id":3587},"迁移步骤migration-steps-5",[1034,3589,3590,3591,3593,3594,3596,3597,3599],{},"如果你直接设置 ",[1046,3592,3557],{},"（这从来不是公开 API），请改用 ",[1046,3595,3561],{},"。Nuxt router composable 已经使用新属性，所以如果你通过 ",[1046,3598,609],{}," 或路由中间件，则无需更改。",[1029,3601,1325,3603,3605,3606,3608],{"id":3602},"非异步的-callhooknon-async-callhook",[1046,3604,1328],{},"（Non-Async ",[1046,3607,1328],{},"）",[1034,3610,1426,3611,1430],{},[1158,3612,1429],{},[1432,3614,1435],{"id":3615},"变更内容what-changed-8",[1034,3617,3618,3619,3624,3625,3627,3628,1338,3630,3633,3634,3636],{},"随着升级到 ",[1038,3620,3623],{"href":3621,"rel":3622},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fhookable",[1042],"hookable v6","，",[1046,3626,1328],{}," 现在可能返回 ",[1046,3629,1337],{},[1046,3631,3632],{},"Promise\u003Cvoid>","。这是一个显著的性能改进，在没有任何已注册钩子或所有钩子都是同步的情况下，避免了不必要的 ",[1046,3635,1341],{}," 分配。",[1034,3638,3639,3640,3643,3644,3647,3648,3650,3651,1454,3654,3657,3658,3660],{},"默认情况下（在 ",[1046,3641,3642],{},"compatibilityVersion: 4"," 下），Nuxt 用 ",[1046,3645,3646],{},"Promise.resolve()"," 包裹 ",[1046,3649,1328],{},"，以便现有的 ",[1046,3652,3653],{},".then()",[1046,3655,3656],{},".catch()"," 链式调用继续工作。在 ",[1046,3659,1592],{}," 下，移除了此包装。",[3662,3663,3664],"tip",{},[1034,3665,3666],{},"这会影响构建时的 Nuxt 钩子（被 Nuxt 模块使用）和运行时 Nuxt 钩子（你可能会在你的应用代码中使用）。",[1432,3668,1771],{"id":3669},"变更原因reasons-for-change-4",[1034,3671,3672,3673,3675,3676,3678],{},"Hookable v6 的 ",[1046,3674,1328],{}," 快了 20-40 倍，因为它在不需要时避免了创建 ",[1046,3677,1341],{},"。这对拥有许多钩子调用点的应用有益。",[1432,3680,1471],{"id":3681},"迁移步骤migration-steps-6",[1034,3683,3684,3685,1744,3687,3689,3690,3692,3693,1309],{},"如果你或你的模块使用带有 ",[1046,3686,3653],{},[1046,3688,3656],{}," 链式调用的 ",[1046,3691,1328],{},"，请改用 ",[1046,3694,3695],{},"await",[1054,3697,3699],{"className":2849,"code":3698,"language":2851,"meta":354,"style":354},"- nuxtApp.callHook('my:hook', data).then(() => { ... })\n+ await nuxtApp.callHook('my:hook', data)\n",[1046,3700,3701,3706],{"__ignoreMap":354},[1063,3702,3703],{"class":1065,"line":1066},[1063,3704,3705],{},"- nuxtApp.callHook('my:hook', data).then(() => { ... })\n",[1063,3707,3708],{"class":1065,"line":1211},[1063,3709,3710],{},"+ await nuxtApp.callHook('my:hook', data)\n",[1054,3712,3714],{"className":2849,"code":3713,"language":2851,"meta":354,"style":354},"- nuxtApp.hooks.callHook('my:hook', data).catch(err => { ... })\n+ try { await nuxtApp.hooks.callHook('my:hook', data) } catch (err) { ... }\n",[1046,3715,3716,3721],{"__ignoreMap":354},[1063,3717,3718],{"class":1065,"line":1066},[1063,3719,3720],{},"- nuxtApp.hooks.callHook('my:hook', data).catch(err => { ... })\n",[1063,3722,3723],{"class":1065,"line":1211},[1063,3724,3725],{},"+ try { await nuxtApp.hooks.callHook('my:hook', data) } catch (err) { ... }\n",[3662,3727,3728],{},[1034,3729,3730,3731,3733,3734,3738,3739,3742],{},"你可以通过设置 ",[1046,3732,1413],{},"（参见 ",[1038,3735,3737],{"href":3736},"\u002Fdocs\u002Fgetting-started\u002Fupgrade#testing-nuxt-5","测试 Nuxt 5","）或通过使用 ",[1046,3740,3741],{},"experimental.asyncCallHook: false"," 显式启用它来提前测试此特性。",[1034,3744,3745,3746,3748,3749,1309],{},"或者，你可以通过如下方式确保 ",[1046,3747,1328],{}," 始终返回 ",[1046,3750,1341],{},[1054,3752,3754],{"className":1182,"code":3753,"filename":174,"language":1184,"meta":1185,"style":354},"export default defineNuxtConfig({\n  experimental: {\n    asyncCallHook: true,\n  },\n})\n",[1046,3755,3756,3768,3777,3789,3793],{"__ignoreMap":354},[1063,3757,3758,3760,3762,3764,3766],{"class":1065,"line":1066},[1063,3759,1193],{"class":1192},[1063,3761,1196],{"class":1192},[1063,3763,1200],{"class":1199},[1063,3765,1204],{"class":1203},[1063,3767,1208],{"class":1207},[1063,3769,3770,3773,3775],{"class":1065,"line":1211},[1063,3771,3772],{"class":1214},"  experimental",[1063,3774,1218],{"class":1207},[1063,3776,1221],{"class":1207},[1063,3778,3779,3782,3784,3787],{"class":1065,"line":1224},[1063,3780,3781],{"class":1214},"    asyncCallHook",[1063,3783,1218],{"class":1207},[1063,3785,3786],{"class":1651}," true",[1063,3788,1236],{"class":1207},[1063,3790,3791],{"class":1065,"line":1239},[1063,3792,1242],{"class":1207},[1063,3794,3795,3797],{"class":1065,"line":1245},[1063,3796,1248],{"class":1207},[1063,3798,1251],{"class":1203},[1029,3800,3802],{"id":3801},"仅客户端注释占位符client-only-comment-placeholders","仅客户端注释占位符（Client-Only Comment Placeholders）",[1034,3804,1426,3805,1430],{},[1158,3806,1429],{},[1432,3808,1435],{"id":3809},"变更内容what-changed-9",[1034,3811,1589,3812,3814,3815,3818,3819,3822,3823,3826,3827,3829],{},[1046,3813,1592],{}," 下，仅客户端组件（",[1046,3816,3817],{},".client.vue"," 文件和 ",[1046,3820,3821],{},"createClientOnly()"," 包装器）现在在服务端渲染一个 HTML 注释（",[1046,3824,3825],{},"\u003C!--placeholder-->","），而不是一个空的 ",[1046,3828,1354],{}," 元素。",[1432,3831,1771],{"id":3832},"变更原因reasons-for-change-5",[1034,3834,3835,3836,3838,3839,3842],{},"当占位符 ",[1046,3837,1354],{}," 与实际组件根共享相同的标签名时，Vue 的运行时在 hydration 期间会跳过重新应用 ",[1046,3840,3841],{},"setScopeId","。这会导致组件挂载后缺少 scoped styles。使用注释节点完全避免了标签名冲突。",[1432,3844,1471],{"id":3845},"迁移步骤migration-steps-7",[1034,3847,3848,3849,3851,3852,1445,3855,3858,3859,3862,3863,3865],{},"如果你依赖占位符 ",[1046,3850,1354],{}," 来继承属性（",[1046,3853,3854],{},"class",[1046,3856,3857],{},"style"," 等）以实现布局目的（例如，预留空间以防止布局偏移），请将组件包装在带有 ",[1046,3860,3861],{},"#fallback"," 插槽的 ",[1046,3864,357],{}," 中：",[1054,3867,3869],{"className":2849,"code":3868,"language":2851,"meta":354,"style":354},"- \u003CMyComponent class=\"placeholder\" style=\"min-height: 200px\" \u002F>\n+ \u003CClientOnly>\n+   \u003CMyComponent \u002F>\n+   \u003Ctemplate #fallback>\n+     \u003Cdiv class=\"placeholder\" style=\"min-height: 200px\">\u003C\u002Fdiv>\n+   \u003C\u002Ftemplate>\n+ \u003C\u002FClientOnly>\n",[1046,3870,3871,3876,3881,3886,3891,3896,3901],{"__ignoreMap":354},[1063,3872,3873],{"class":1065,"line":1066},[1063,3874,3875],{},"- \u003CMyComponent class=\"placeholder\" style=\"min-height: 200px\" \u002F>\n",[1063,3877,3878],{"class":1065,"line":1211},[1063,3879,3880],{},"+ \u003CClientOnly>\n",[1063,3882,3883],{"class":1065,"line":1224},[1063,3884,3885],{},"+   \u003CMyComponent \u002F>\n",[1063,3887,3888],{"class":1065,"line":1239},[1063,3889,3890],{},"+   \u003Ctemplate #fallback>\n",[1063,3892,3893],{"class":1065,"line":1245},[1063,3894,3895],{},"+     \u003Cdiv class=\"placeholder\" style=\"min-height: 200px\">\u003C\u002Fdiv>\n",[1063,3897,3898],{"class":1065,"line":1519},[1063,3899,3900],{},"+   \u003C\u002Ftemplate>\n",[1063,3902,3903],{"class":1065,"line":1526},[1063,3904,3905],{},"+ \u003C\u002FClientOnly>\n",[3662,3907,3908],{},[1034,3909,3730,3910,3733,3912,3738,3914,3742],{},[1046,3911,1413],{},[1038,3913,3737],{"href":3736},[1046,3915,3916],{},"experimental.clientNodePlaceholder: true",[1034,3918,3919,3920,3922],{},"或者，你可以通过如下方式恢复为先前的 ",[1046,3921,1354],{}," 占位符行为：",[1054,3924,3926],{"className":1182,"code":3925,"filename":174,"language":1184,"meta":1185,"style":354},"export default defineNuxtConfig({\n  experimental: {\n    clientNodePlaceholder: false,\n  },\n})\n",[1046,3927,3928,3940,3948,3959,3963],{"__ignoreMap":354},[1063,3929,3930,3932,3934,3936,3938],{"class":1065,"line":1066},[1063,3931,1193],{"class":1192},[1063,3933,1196],{"class":1192},[1063,3935,1200],{"class":1199},[1063,3937,1204],{"class":1203},[1063,3939,1208],{"class":1207},[1063,3941,3942,3944,3946],{"class":1065,"line":1211},[1063,3943,3772],{"class":1214},[1063,3945,1218],{"class":1207},[1063,3947,1221],{"class":1207},[1063,3949,3950,3953,3955,3957],{"class":1065,"line":1224},[1063,3951,3952],{"class":1214},"    clientNodePlaceholder",[1063,3954,1218],{"class":1207},[1063,3956,1652],{"class":1651},[1063,3958,1236],{"class":1207},[1063,3960,3961],{"class":1065,"line":1239},[1063,3962,1242],{"class":1207},[1063,3964,3965,3967],{"class":1065,"line":1245},[1063,3966,1248],{"class":1207},[1063,3968,1251],{"class":1203},[1029,3970,3972],{"id":3971},"更严格的副作用导入stricter-side-effect-imports","更严格的副作用导入（Stricter Side-Effect Imports）",[1034,3974,1426,3975,1430],{},[1158,3976,1429],{},[1432,3978,1435],{"id":3979},"变更内容what-changed-10",[1034,3981,1589,3982,3984,3985,1364,3987,3993],{},[1046,3983,1592],{}," 下，Nuxt 生成的 ",[1046,3986,182],{},[1038,3988,3991],{"href":3989,"rel":3990},"https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig\u002F#noUncheckedSideEffectImports",[1042],[1046,3992,1370],{},"。这是 TypeScript 7 中的一个默认值，所以提前采用可以让你的项目在该升级之前就与之保持一致。",[1034,3995,3996,3997,4000,4001,4003],{},"开启此选项后，TypeScript 无法解析为模块的纯副作用导入（",[1046,3998,3999],{},"import '.\u002Fsetup'","）现在会成为类型错误，而以前会被忽略。这仅影响类型检查（",[1046,4002,725],{}," 和你的编辑器），不影响运行时行为。",[1432,4005,1771],{"id":4006},"变更原因reasons-for-change-6",[1034,4008,4009],{},"未解析的副作用导入以前被静默忽略，因此拼写错误或已删除的文件可能通过类型检查。标记它们可以捕获这些错误，并匹配 TypeScript 7 的默认值。",[1432,4011,1471],{"id":4012},"迁移步骤migration-steps-8",[1034,4014,4015,4016,4019],{},"如果类型检查现在因对非代码资源的副作用导入（例如 ",[1046,4017,4018],{},"import '~\u002Fassets\u002Fstyles.css'","）而报错，请添加一个环境模块声明，让 TypeScript 知道该导入是有效的：",[1054,4021,4024],{"className":1182,"code":4022,"filename":4023,"language":1184,"meta":354,"style":354},"declare module '*.css' {}\n","types.d.ts",[1046,4025,4026],{"__ignoreMap":354},[1063,4027,4028,4031,4034,4036,4039,4041],{"class":1065,"line":1066},[1063,4029,4030],{"class":1832},"declare",[1063,4032,4033],{"class":1832}," module",[1063,4035,2025],{"class":1860},[1063,4037,4038],{"class":1073},"*.css",[1063,4040,1861],{"class":1860},[1063,4042,2148],{"class":1207},[3662,4044,4045,4052],{},[1034,4046,4047,4048,4051],{},"你可以通过在你的 ",[1046,4049,4050],{},"nuxt.config"," 中禁用该选项来恢复先前的行为：",[1054,4053,4055],{"className":1182,"code":4054,"filename":174,"language":1184,"meta":1185,"style":354},"export default defineNuxtConfig({\n  typescript: {\n    tsConfig: {\n      compilerOptions: {\n        noUncheckedSideEffectImports: false,\n      },\n    },\n  },\n})\n",[1046,4056,4057,4069,4078,4087,4096,4107,4111,4115,4119],{"__ignoreMap":354},[1063,4058,4059,4061,4063,4065,4067],{"class":1065,"line":1066},[1063,4060,1193],{"class":1192},[1063,4062,1196],{"class":1192},[1063,4064,1200],{"class":1199},[1063,4066,1204],{"class":1203},[1063,4068,1208],{"class":1207},[1063,4070,4071,4074,4076],{"class":1065,"line":1211},[1063,4072,4073],{"class":1214},"  typescript",[1063,4075,1218],{"class":1207},[1063,4077,1221],{"class":1207},[1063,4079,4080,4083,4085],{"class":1065,"line":1224},[1063,4081,4082],{"class":1214},"    tsConfig",[1063,4084,1218],{"class":1207},[1063,4086,1221],{"class":1207},[1063,4088,4089,4092,4094],{"class":1065,"line":1239},[1063,4090,4091],{"class":1214},"      compilerOptions",[1063,4093,1218],{"class":1207},[1063,4095,1221],{"class":1207},[1063,4097,4098,4101,4103,4105],{"class":1065,"line":1245},[1063,4099,4100],{"class":1214},"        noUncheckedSideEffectImports",[1063,4102,1218],{"class":1207},[1063,4104,1652],{"class":1651},[1063,4106,1236],{"class":1207},[1063,4108,4109],{"class":1065,"line":1519},[1063,4110,3229],{"class":1207},[1063,4112,4113],{"class":1065,"line":1526},[1063,4114,1659],{"class":1207},[1063,4116,4117],{"class":1065,"line":1532},[1063,4118,1242],{"class":1207},[1063,4120,4121,4123],{"class":1065,"line":1555},[1063,4122,1248],{"class":1207},[1063,4124,1251],{"class":1203},[1029,4126,4128],{"id":4127},"vue-options-api-默认禁用vue-options-api-disabled-by-default","Vue Options API 默认禁用（Vue Options API Disabled by Default）",[1034,4130,1426,4131,1430],{},[1158,4132,1429],{},[1432,4134,1435],{"id":4135},"变更内容what-changed-11",[1034,4137,1589,4138,4140,4141,4148,4149,4152],{},[1046,4139,1592],{}," 下，Nuxt 将 Vue 的 ",[1038,4142,4145],{"href":4143,"rel":4144},"https:\u002F\u002Fvuejs.org\u002Fapi\u002Fcompile-time-flags#VUE_OPTIONS_API",[1042],[1046,4146,4147],{},"__VUE_OPTIONS_API__"," 特性标志设为 ",[1046,4150,4151],{},"false","，这会将 Vue 的 Options API 运行时编译出客户端 bundle。",[1432,4154,1771],{"id":4155},"变更原因reasons-for-change-7",[1034,4157,4158,4159,4162],{},"Options API 运行时会随每个客户端 bundle 一起发布，即使大多数 Nuxt 应用都是使用 Composition API 和 ",[1046,4160,4161],{},"\u003Cscript setup>"," 编写的。移除它可减小客户端 bundle 体积（在最小应用上约为 6 kB minified \u002F 2 kB gzipped）。",[1432,4164,1471],{"id":4165},"迁移步骤migration-steps-9",[1034,4167,4168,4169,4172,4173,4175],{},"如果你的任何组件（或某个依赖的组件）使用了 Options API（",[1046,4170,4171],{},"export default { data() {}, methods: {}, ... }","），请在你的 ",[1046,4174,4050],{}," 中重新启用它：",[1054,4177,4179],{"className":1182,"code":4178,"filename":174,"language":1184,"meta":1185,"style":354},"export default defineNuxtConfig({\n  vue: {\n    optionsApi: true,\n  },\n})\n",[1046,4180,4181,4193,4202,4213,4217],{"__ignoreMap":354},[1063,4182,4183,4185,4187,4189,4191],{"class":1065,"line":1066},[1063,4184,1193],{"class":1192},[1063,4186,1196],{"class":1192},[1063,4188,1200],{"class":1199},[1063,4190,1204],{"class":1203},[1063,4192,1208],{"class":1207},[1063,4194,4195,4198,4200],{"class":1065,"line":1211},[1063,4196,4197],{"class":1214},"  vue",[1063,4199,1218],{"class":1207},[1063,4201,1221],{"class":1207},[1063,4203,4204,4207,4209,4211],{"class":1065,"line":1224},[1063,4205,4206],{"class":1214},"    optionsApi",[1063,4208,1218],{"class":1207},[1063,4210,3786],{"class":1651},[1063,4212,1236],{"class":1207},[1063,4214,4215],{"class":1065,"line":1239},[1063,4216,1242],{"class":1207},[1063,4218,4219,4221],{"class":1065,"line":1245},[1063,4220,1248],{"class":1207},[1063,4222,1251],{"class":1203},[1406,4224,4225],{},[1034,4226,4227,4229,4230,1454,4233,4236,4237,4240],{},[1046,4228,589],{}," 不受影响：它的 ",[1046,4231,4232],{},"asyncData",[1046,4234,4235],{},"head"," 选项是通过 ",[1046,4238,4239],{},"setup()"," 而非 Vue Options API 处理的，因此无论此标志如何，它都能工作。",[3857,4242,4243],{},"html pre.shiki code .sJK67, html code.shiki .sJK67{--shiki-light:#E2931D;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}html pre.shiki code .s-Aze, html code.shiki .s-Aze{--shiki-light:#91B859;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szyBz, html code.shiki .szyBz{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#F97583;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .srJn9, html code.shiki .srJn9{--shiki-light:#6182B8;--shiki-default:#B392F0;--shiki-dark:#82AAFF}html pre.shiki code .smVNa, html code.shiki .smVNa{--shiki-light:#90A4AE;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .sF54B, html code.shiki .sF54B{--shiki-light:#39ADB5;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .sOtFm, html code.shiki .sOtFm{--shiki-light:#E53935;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .sOUxV, html code.shiki .sOUxV{--shiki-light:#F76D47;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}html pre.shiki code .sZqJ9, html code.shiki .sZqJ9{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sJTDI, html code.shiki .sJTDI{--shiki-light:#90A4AE;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .si1Qm, html code.shiki .si1Qm{--shiki-light:#FF5370;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}html pre.shiki code .ssIVr, html code.shiki .ssIVr{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#FFAB70;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sV7Px, html code.shiki .sV7Px{--shiki-light:#9C3EDA;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .s0jeK, html code.shiki .s0jeK{--shiki-light:#39ADB5;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .syA7L, html code.shiki .syA7L{--shiki-light:#E53935;--shiki-default:#B392F0;--shiki-dark:#F07178}html pre.shiki code .sXPRQ, html code.shiki .sXPRQ{--shiki-light:#39ADB5;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .supr-, html code.shiki .supr-{--shiki-light:#91B859;--shiki-default:#79B8FF;--shiki-dark:#C3E88D}",{"title":354,"searchDepth":1224,"depth":1224,"links":4245},[4246,4250],{"id":1026,"depth":1211,"text":1027,"children":4247},[4248,4249],{"id":1031,"depth":1224,"text":1032},{"id":1141,"depth":1224,"text":1142},{"id":1152,"depth":1211,"text":1153,"children":4251},[4252,4253,4258,4262,4267,4270,4282,4288,4294,4300,4306,4311,4316],{"id":1164,"depth":1224,"text":1165},{"id":1420,"depth":1224,"text":4254,"children":4255},"process.* 类型增强已移除（Process Type Augmentation Removed）",[4256,4257],{"id":1434,"depth":1239,"text":1435},{"id":1470,"depth":1239,"text":1471},{"id":1578,"depth":1224,"text":1579,"children":4259},[4260,4261],{"id":1586,"depth":1239,"text":1435},{"id":1603,"depth":1239,"text":1471},{"id":1672,"depth":1224,"text":1673,"children":4263},[4264,4265,4266],{"id":1681,"depth":1239,"text":1435},{"id":1770,"depth":1239,"text":1771},{"id":1791,"depth":1239,"text":1471},{"id":2601,"depth":1224,"text":2602,"children":4268},[4269],{"id":2609,"depth":1239,"text":1435},{"id":2692,"depth":1224,"text":2693,"children":4271},[4272,4273,4274,4276,4277,4279,4281],{"id":2701,"depth":1239,"text":1435},{"id":2752,"depth":1239,"text":2753},{"id":2905,"depth":1239,"text":4275},"错误处理：status\u002FstatusText 取代 statusCode\u002FstatusMessage",{"id":3022,"depth":1239,"text":3023},{"id":3142,"depth":1239,"text":4278},"useRuntimeConfig() 不再接受 event",{"id":3185,"depth":1239,"text":4280},"路由规则：statusCode 重命名为 status",{"id":3240,"depth":1239,"text":3241},{"id":3295,"depth":1224,"text":4283,"children":4284},"移除 experimental.externalVue",[4285,4286,4287],{"id":3306,"depth":1239,"text":1435},{"id":3334,"depth":1239,"text":1771},{"id":3359,"depth":1239,"text":1471},{"id":3404,"depth":1224,"text":4289,"children":4290},"@vitejs\u002Fplugin-vue-jsx 现在变为可选（Is Now Optional）",[4291,4292,4293],{"id":3415,"depth":1239,"text":1435},{"id":3437,"depth":1239,"text":1771},{"id":3449,"depth":1239,"text":1471},{"id":3536,"depth":1224,"text":4295,"children":4296},"移除遗留的 _renderResponse 支持（Removal of Legacy _renderResponse Support）",[4297,4298,4299],{"id":3551,"depth":1239,"text":1435},{"id":3565,"depth":1239,"text":1771},{"id":3587,"depth":1239,"text":1471},{"id":3602,"depth":1224,"text":4301,"children":4302},"非异步的 callHook（Non-Async callHook）",[4303,4304,4305],{"id":3615,"depth":1239,"text":1435},{"id":3669,"depth":1239,"text":1771},{"id":3681,"depth":1239,"text":1471},{"id":3801,"depth":1224,"text":3802,"children":4307},[4308,4309,4310],{"id":3809,"depth":1239,"text":1435},{"id":3832,"depth":1239,"text":1771},{"id":3845,"depth":1239,"text":1471},{"id":3971,"depth":1224,"text":3972,"children":4312},[4313,4314,4315],{"id":3979,"depth":1239,"text":1435},{"id":4006,"depth":1239,"text":1771},{"id":4012,"depth":1239,"text":1471},{"id":4127,"depth":1224,"text":4128,"children":4317},[4318,4319,4320],{"id":4135,"depth":1239,"text":1435},{"id":4155,"depth":1239,"text":1771},{"id":4165,"depth":1239,"text":1471},"md",{},"[object Object]",{"title":74,"description":75},"docs\u002F1.getting-started\u002F18.upgrade","1RiISjLqK7hKXGmjlKPdCXHCq2WUXbFPTYg2bQjfl2I",1785179852567]