[{"data":1,"prerenderedAt":2842},["ShallowReactive",2],{"docs-all-flat":3,"docs-\u002Fdocs\u002Fdirectory-structure\u002Fapp\u002Fplugins":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":110,"body":1020,"description":111,"extension":2834,"meta":2835,"navigation":2838,"path":109,"seo":2839,"stem":2840,"__hash__":2841},"docs\u002Fdocs\u002F2.directory-structure\u002F1.app\u002F1.plugins.md",{"type":1021,"value":1022,"toc":2818},"minimark",[1023,1032,1042,1055,1059,1062,1163,1174,1188,1270,1273,1282,1326,1330,1333,1523,2814],[1024,1025,1026,1027,1031],"p",{},"Nuxt 会自动读取 ",[1028,1029,1030],"code",{},"app\u002Fplugins\u002F"," 目录中的文件，并在创建 Vue 应用时加载它们。",[1033,1034,1035],"note",{},[1024,1036,1037,1038,1041],{},"目录内的所有插件都会被自动注册，你无需将它们单独添加到 ",[1028,1039,1040],{},"nuxt.config"," 中。",[1033,1043,1044],{},[1024,1045,1046,1047,1050,1051,1054],{},"你可以在文件名中使用 ",[1028,1048,1049],{},".server"," 或 ",[1028,1052,1053],{},".client"," 后缀，让某个插件只在服务端或客户端加载。",[1056,1057,1058],"h2",{"id":1058},"已注册的插件",[1024,1060,1061],{},"只有目录顶层文件（或任意子目录内的 index 文件）会被自动注册为插件。",[1063,1064,1069],"pre",{"className":1065,"code":1066,"filename":1067,"language":1068,"meta":354,"style":354},"language-bash shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","-| plugins\u002F\n---| foo.ts      \u002F\u002F 被扫描\n---| bar\u002F\n-----| baz.ts    \u002F\u002F 不被扫描\n-----| foz.vue   \u002F\u002F 不被扫描\n-----| index.ts  \u002F\u002F 当前会被扫描，但已废弃\n","Directory structure","bash",[1028,1070,1071,1087,1105,1115,1132,1147],{"__ignoreMap":354},[1072,1073,1076,1080,1084],"span",{"class":1074,"line":1075},"line",1,[1072,1077,1079],{"class":1078},"sJK67","-",[1072,1081,1083],{"class":1082},"sXPRQ","|",[1072,1085,1086],{"class":1078}," plugins\u002F\n",[1072,1088,1090,1093,1095,1098,1102],{"class":1074,"line":1089},2,[1072,1091,1092],{"class":1078},"---",[1072,1094,1083],{"class":1082},[1072,1096,1097],{"class":1078}," foo.ts",[1072,1099,1101],{"class":1100},"s-Aze","      \u002F\u002F",[1072,1103,1104],{"class":1100}," 被扫描\n",[1072,1106,1108,1110,1112],{"class":1074,"line":1107},3,[1072,1109,1092],{"class":1078},[1072,1111,1083],{"class":1082},[1072,1113,1114],{"class":1078}," bar\u002F\n",[1072,1116,1118,1121,1123,1126,1129],{"class":1074,"line":1117},4,[1072,1119,1120],{"class":1078},"-----",[1072,1122,1083],{"class":1082},[1072,1124,1125],{"class":1078}," baz.ts",[1072,1127,1128],{"class":1100},"    \u002F\u002F",[1072,1130,1131],{"class":1100}," 不被扫描\n",[1072,1133,1135,1137,1139,1142,1145],{"class":1074,"line":1134},5,[1072,1136,1120],{"class":1078},[1072,1138,1083],{"class":1082},[1072,1140,1141],{"class":1078}," foz.vue",[1072,1143,1144],{"class":1100},"   \u002F\u002F",[1072,1146,1131],{"class":1100},[1072,1148,1150,1152,1154,1157,1160],{"class":1074,"line":1149},6,[1072,1151,1120],{"class":1078},[1072,1153,1083],{"class":1082},[1072,1155,1156],{"class":1078}," index.ts",[1072,1158,1159],{"class":1100},"  \u002F\u002F",[1072,1161,1162],{"class":1100}," 当前会被扫描，但已废弃\n",[1024,1164,1165,1166,1169,1170,1173],{},"只有 ",[1028,1167,1168],{},"foo.ts"," 和 ",[1028,1171,1172],{},"bar\u002Findex.ts"," 会被注册。",[1024,1175,1176,1177,1179,1180,1187],{},"要添加子目录中的插件，可以使用 ",[1028,1178,174],{}," 中的 ",[1181,1182,1184],"a",{"href":1183},"\u002Fdocs\u002Fapi\u002Fnuxt-config#plugins-1",[1028,1185,1186],{},"app\u002Fplugins"," 选项：",[1063,1189,1194],{"className":1190,"code":1191,"filename":174,"language":1192,"meta":1193,"style":354},"language-ts shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","export default defineNuxtConfig({\n  plugins: [\n    '~\u002Fplugins\u002Fbar\u002Fbaz',\n    '~\u002Fplugins\u002Fbar\u002Ffoz',\n  ],\n})\n","ts","twoslash",[1028,1195,1196,1217,1229,1244,1255,1262],{"__ignoreMap":354},[1072,1197,1198,1202,1205,1209,1213],{"class":1074,"line":1075},[1072,1199,1201],{"class":1200},"szyBz","export",[1072,1203,1204],{"class":1200}," default",[1072,1206,1208],{"class":1207},"srJn9"," defineNuxtConfig",[1072,1210,1212],{"class":1211},"smVNa","(",[1072,1214,1216],{"class":1215},"sF54B","{\n",[1072,1218,1219,1223,1226],{"class":1074,"line":1089},[1072,1220,1222],{"class":1221},"sOtFm","  plugins",[1072,1224,1225],{"class":1215},":",[1072,1227,1228],{"class":1211}," [\n",[1072,1230,1231,1235,1238,1241],{"class":1074,"line":1107},[1072,1232,1234],{"class":1233},"s0jeK","    '",[1072,1236,1237],{"class":1100},"~\u002Fplugins\u002Fbar\u002Fbaz",[1072,1239,1240],{"class":1233},"'",[1072,1242,1243],{"class":1215},",\n",[1072,1245,1246,1248,1251,1253],{"class":1074,"line":1117},[1072,1247,1234],{"class":1233},[1072,1249,1250],{"class":1100},"~\u002Fplugins\u002Fbar\u002Ffoz",[1072,1252,1240],{"class":1233},[1072,1254,1243],{"class":1215},[1072,1256,1257,1260],{"class":1074,"line":1134},[1072,1258,1259],{"class":1211},"  ]",[1072,1261,1243],{"class":1215},[1072,1263,1264,1267],{"class":1074,"line":1149},[1072,1265,1266],{"class":1215},"}",[1072,1268,1269],{"class":1211},")\n",[1056,1271,1272],{"id":1272},"创建插件",[1024,1274,1275,1276,1281],{},"传给插件的唯一参数是 ",[1181,1277,1278],{"href":484},[1028,1279,1280],{},"nuxtApp","。",[1063,1283,1286],{"className":1190,"code":1284,"filename":1285,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin((nuxtApp) => {\n  \u002F\u002F 对 nuxtApp 做一些操作\n})\n","plugins\u002Fhello.ts",[1028,1287,1288,1314,1320],{"__ignoreMap":354},[1072,1289,1290,1292,1294,1297,1299,1301,1304,1307,1311],{"class":1074,"line":1075},[1072,1291,1201],{"class":1200},[1072,1293,1204],{"class":1200},[1072,1295,1296],{"class":1207}," defineNuxtPlugin",[1072,1298,1212],{"class":1211},[1072,1300,1212],{"class":1215},[1072,1302,1280],{"class":1303},"ssIVr",[1072,1305,1306],{"class":1215},")",[1072,1308,1310],{"class":1309},"sV7Px"," =>",[1072,1312,1313],{"class":1215}," {\n",[1072,1315,1316],{"class":1074,"line":1089},[1072,1317,1319],{"class":1318},"sZqJ9","  \u002F\u002F 对 nuxtApp 做一些操作\n",[1072,1321,1322,1324],{"class":1074,"line":1107},[1072,1323,1266],{"class":1215},[1072,1325,1269],{"class":1211},[1327,1328,1329],"h3",{"id":1329},"对象语法插件",[1024,1331,1332],{},"也可以使用对象语法定义插件，用于更高级的用例。例如：",[1063,1334,1336],{"className":1190,"code":1335,"filename":1285,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin({\n  name: 'my-plugin',\n  enforce: 'pre', \u002F\u002F 或 'post'\n  async setup (nuxtApp) {\n    \u002F\u002F 这等价于一个普通的函数式插件\n  },\n  hooks: {\n    \u002F\u002F 你可以在这里直接注册 Nuxt 应用的运行时钩子\n    'app:created' () {\n      const nuxtApp = useNuxtApp()\n      \u002F\u002F 在钩子中做一些操作\n    },\n  },\n  env: {\n    \u002F\u002F 如果你不希望插件在渲染仅服务端或 island 组件时运行，将此值设为 `false`\n    islands: true,\n  },\n})\n",[1028,1337,1338,1350,1367,1386,1404,1409,1414,1424,1430,1445,1464,1470,1476,1481,1491,1497,1511,1516],{"__ignoreMap":354},[1072,1339,1340,1342,1344,1346,1348],{"class":1074,"line":1075},[1072,1341,1201],{"class":1200},[1072,1343,1204],{"class":1200},[1072,1345,1296],{"class":1207},[1072,1347,1212],{"class":1211},[1072,1349,1216],{"class":1215},[1072,1351,1352,1355,1357,1360,1363,1365],{"class":1074,"line":1089},[1072,1353,1354],{"class":1221},"  name",[1072,1356,1225],{"class":1215},[1072,1358,1359],{"class":1233}," '",[1072,1361,1362],{"class":1100},"my-plugin",[1072,1364,1240],{"class":1233},[1072,1366,1243],{"class":1215},[1072,1368,1369,1372,1374,1376,1378,1380,1383],{"class":1074,"line":1107},[1072,1370,1371],{"class":1221},"  enforce",[1072,1373,1225],{"class":1215},[1072,1375,1359],{"class":1233},[1072,1377,1063],{"class":1100},[1072,1379,1240],{"class":1233},[1072,1381,1382],{"class":1215},",",[1072,1384,1385],{"class":1318}," \u002F\u002F 或 'post'\n",[1072,1387,1388,1391,1395,1398,1400,1402],{"class":1074,"line":1117},[1072,1389,1390],{"class":1309},"  async",[1072,1392,1394],{"class":1393},"syA7L"," setup",[1072,1396,1397],{"class":1215}," (",[1072,1399,1280],{"class":1303},[1072,1401,1306],{"class":1215},[1072,1403,1313],{"class":1215},[1072,1405,1406],{"class":1074,"line":1134},[1072,1407,1408],{"class":1318},"    \u002F\u002F 这等价于一个普通的函数式插件\n",[1072,1410,1411],{"class":1074,"line":1149},[1072,1412,1413],{"class":1215},"  },\n",[1072,1415,1417,1420,1422],{"class":1074,"line":1416},7,[1072,1418,1419],{"class":1221},"  hooks",[1072,1421,1225],{"class":1215},[1072,1423,1313],{"class":1215},[1072,1425,1427],{"class":1074,"line":1426},8,[1072,1428,1429],{"class":1318},"    \u002F\u002F 你可以在这里直接注册 Nuxt 应用的运行时钩子\n",[1072,1431,1433,1435,1438,1440,1443],{"class":1074,"line":1432},9,[1072,1434,1234],{"class":1233},[1072,1436,1437],{"class":1100},"app:created",[1072,1439,1240],{"class":1233},[1072,1441,1442],{"class":1215}," ()",[1072,1444,1313],{"class":1215},[1072,1446,1448,1451,1455,1458,1461],{"class":1074,"line":1447},10,[1072,1449,1450],{"class":1309},"      const",[1072,1452,1454],{"class":1453},"sJTDI"," nuxtApp",[1072,1456,1457],{"class":1082}," =",[1072,1459,1460],{"class":1207}," useNuxtApp",[1072,1462,1463],{"class":1221},"()\n",[1072,1465,1467],{"class":1074,"line":1466},11,[1072,1468,1469],{"class":1318},"      \u002F\u002F 在钩子中做一些操作\n",[1072,1471,1473],{"class":1074,"line":1472},12,[1072,1474,1475],{"class":1215},"    },\n",[1072,1477,1479],{"class":1074,"line":1478},13,[1072,1480,1413],{"class":1215},[1072,1482,1484,1487,1489],{"class":1074,"line":1483},14,[1072,1485,1486],{"class":1221},"  env",[1072,1488,1225],{"class":1215},[1072,1490,1313],{"class":1215},[1072,1492,1494],{"class":1074,"line":1493},15,[1072,1495,1496],{"class":1318},"    \u002F\u002F 如果你不希望插件在渲染仅服务端或 island 组件时运行，将此值设为 `false`\n",[1072,1498,1500,1503,1505,1509],{"class":1074,"line":1499},16,[1072,1501,1502],{"class":1221},"    islands",[1072,1504,1225],{"class":1215},[1072,1506,1508],{"class":1507},"si1Qm"," true",[1072,1510,1243],{"class":1215},[1072,1512,1514],{"class":1074,"line":1513},17,[1072,1515,1413],{"class":1215},[1072,1517,1519,1521],{"class":1074,"line":1518},18,[1072,1520,1266],{"class":1215},[1072,1522,1269],{"class":1211},[1524,1525,1528,1537,1540,1543,1573,1584,1587,1604,1607,1610,1617,1689,1692,1699,1782,1785,1796,1843,1846,1862,1879,1882,1894,2106,2109,2226,2234,2263,2266,2273,2283,2286,2412,2416,2425,2428,2519,2522,2659,2663,2666,2794,2807],"video-accordion",{"title":1526,"video-id":1527},"观看 Alexander Lichter 关于 Nuxt 插件对象语法的视频","2aXZyXB1QGQ",[1033,1529,1530],{},[1024,1531,1532,1533,1536],{},"如果你使用对象语法，这些属性会被静态分析，以生成更优化的构建产物。因此你不应该在运行时定义它们。比如，设置 ",[1028,1534,1535],{},"enforce: import.meta.server ? 'pre' : 'post'"," 会破坏 Nuxt 未来能为你的插件做的任何优化。使用对象语法时，Nuxt 会静态预加载任何钩子监听器，让你无需担心插件注册的顺序即可定义钩子。",[1056,1538,1539],{"id":1539},"注册顺序",[1024,1541,1542],{},"你可以通过给文件名添加「字母序」数字前缀来控制插件的注册顺序。",[1063,1544,1546],{"className":1065,"code":1545,"filename":1067,"language":1068,"meta":354,"style":354},"plugins\u002F\n | - 01.myPlugin.ts\n | - 02.myOtherPlugin.ts\n",[1028,1547,1548,1553,1564],{"__ignoreMap":354},[1072,1549,1550],{"class":1074,"line":1075},[1072,1551,1552],{"class":1078},"plugins\u002F\n",[1072,1554,1555,1558,1561],{"class":1074,"line":1089},[1072,1556,1557],{"class":1082}," |",[1072,1559,1560],{"class":1078}," -",[1072,1562,1563],{"class":1100}," 01.myPlugin.ts\n",[1072,1565,1566,1568,1570],{"class":1074,"line":1107},[1072,1567,1557],{"class":1082},[1072,1569,1560],{"class":1078},[1072,1571,1572],{"class":1100}," 02.myOtherPlugin.ts\n",[1024,1574,1575,1576,1579,1580,1583],{},"在此示例中，",[1028,1577,1578],{},"02.myOtherPlugin.ts"," 将能访问到由 ",[1028,1581,1582],{},"01.myPlugin.ts"," 注入的任何内容。",[1024,1585,1586],{},"当你有一个插件依赖另一个插件时，这很有用。",[1033,1588,1589],{},[1024,1590,1591,1592,1595,1596,1599,1600,1603],{},"如果你还不熟悉「字母序」数字编号，请记住文件名是作为字符串排序的，而不是数值。例如，",[1028,1593,1594],{},"10.myPlugin.ts"," 会排在 ",[1028,1597,1598],{},"2.myOtherPlugin.ts"," 之前。这正是示例中给个位数前缀补 ",[1028,1601,1602],{},"0"," 的原因。",[1056,1605,1606],{"id":1606},"加载策略",[1327,1608,1609],{"id":1609},"并行插件",[1024,1611,1612,1613,1616],{},"默认情况下，Nuxt 会按顺序加载插件。你可以将一个插件定义为 ",[1028,1614,1615],{},"parallel","，这样 Nuxt 在加载下一个插件前不会等待该插件执行完毕。",[1063,1618,1621],{"className":1190,"code":1619,"filename":1620,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin({\n  name: 'my-plugin',\n  parallel: true,\n  async setup (nuxtApp) {\n    \u002F\u002F 下一个插件会立即被执行\n  },\n})\n","plugins\u002Fmy-plugin.ts",[1028,1622,1623,1635,1649,1660,1674,1679,1683],{"__ignoreMap":354},[1072,1624,1625,1627,1629,1631,1633],{"class":1074,"line":1075},[1072,1626,1201],{"class":1200},[1072,1628,1204],{"class":1200},[1072,1630,1296],{"class":1207},[1072,1632,1212],{"class":1211},[1072,1634,1216],{"class":1215},[1072,1636,1637,1639,1641,1643,1645,1647],{"class":1074,"line":1089},[1072,1638,1354],{"class":1221},[1072,1640,1225],{"class":1215},[1072,1642,1359],{"class":1233},[1072,1644,1362],{"class":1100},[1072,1646,1240],{"class":1233},[1072,1648,1243],{"class":1215},[1072,1650,1651,1654,1656,1658],{"class":1074,"line":1107},[1072,1652,1653],{"class":1221},"  parallel",[1072,1655,1225],{"class":1215},[1072,1657,1508],{"class":1507},[1072,1659,1243],{"class":1215},[1072,1661,1662,1664,1666,1668,1670,1672],{"class":1074,"line":1117},[1072,1663,1390],{"class":1309},[1072,1665,1394],{"class":1393},[1072,1667,1397],{"class":1215},[1072,1669,1280],{"class":1303},[1072,1671,1306],{"class":1215},[1072,1673,1313],{"class":1215},[1072,1675,1676],{"class":1074,"line":1134},[1072,1677,1678],{"class":1318},"    \u002F\u002F 下一个插件会立即被执行\n",[1072,1680,1681],{"class":1074,"line":1149},[1072,1682,1413],{"class":1215},[1072,1684,1685,1687],{"class":1074,"line":1416},[1072,1686,1266],{"class":1215},[1072,1688,1269],{"class":1211},[1327,1690,1691],{"id":1691},"有依赖的插件",[1024,1693,1694,1695,1698],{},"如果一个插件需要在另一个插件运行之后才能运行，你可以将该插件的名称加入 ",[1028,1696,1697],{},"dependsOn"," 数组。",[1063,1700,1703],{"className":1190,"code":1701,"filename":1702,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin({\n  name: 'depends-on-my-plugin',\n  dependsOn: ['my-plugin'],\n  async setup (nuxtApp) {\n    \u002F\u002F 此插件会等待 `my-plugin` 执行完毕后才运行\n  },\n})\n","plugins\u002Fdepending-on-my-plugin.ts",[1028,1704,1705,1717,1732,1753,1767,1772,1776],{"__ignoreMap":354},[1072,1706,1707,1709,1711,1713,1715],{"class":1074,"line":1075},[1072,1708,1201],{"class":1200},[1072,1710,1204],{"class":1200},[1072,1712,1296],{"class":1207},[1072,1714,1212],{"class":1211},[1072,1716,1216],{"class":1215},[1072,1718,1719,1721,1723,1725,1728,1730],{"class":1074,"line":1089},[1072,1720,1354],{"class":1221},[1072,1722,1225],{"class":1215},[1072,1724,1359],{"class":1233},[1072,1726,1727],{"class":1100},"depends-on-my-plugin",[1072,1729,1240],{"class":1233},[1072,1731,1243],{"class":1215},[1072,1733,1734,1737,1739,1742,1744,1746,1748,1751],{"class":1074,"line":1107},[1072,1735,1736],{"class":1221},"  dependsOn",[1072,1738,1225],{"class":1215},[1072,1740,1741],{"class":1211}," [",[1072,1743,1240],{"class":1233},[1072,1745,1362],{"class":1100},[1072,1747,1240],{"class":1233},[1072,1749,1750],{"class":1211},"]",[1072,1752,1243],{"class":1215},[1072,1754,1755,1757,1759,1761,1763,1765],{"class":1074,"line":1117},[1072,1756,1390],{"class":1309},[1072,1758,1394],{"class":1393},[1072,1760,1397],{"class":1215},[1072,1762,1280],{"class":1303},[1072,1764,1306],{"class":1215},[1072,1766,1313],{"class":1215},[1072,1768,1769],{"class":1074,"line":1134},[1072,1770,1771],{"class":1318},"    \u002F\u002F 此插件会等待 `my-plugin` 执行完毕后才运行\n",[1072,1773,1774],{"class":1074,"line":1149},[1072,1775,1413],{"class":1215},[1072,1777,1778,1780],{"class":1074,"line":1416},[1072,1779,1266],{"class":1215},[1072,1781,1269],{"class":1211},[1056,1783,1784],{"id":1784},"使用组合式函数",[1024,1786,1787,1788,1791,1792,1795],{},"你可以在 Nuxt 插件中使用",[1181,1789,1790],{"href":93},"组合式函数","以及",[1181,1793,1794],{"href":113},"工具函数","：",[1063,1797,1800],{"className":1190,"code":1798,"filename":1799,"language":1192,"meta":354,"style":354},"export default defineNuxtPlugin((nuxtApp) => {\n  const foo = useFoo()\n})\n","app\u002Fplugins\u002Fhello.ts",[1028,1801,1802,1822,1837],{"__ignoreMap":354},[1072,1803,1804,1806,1808,1810,1812,1814,1816,1818,1820],{"class":1074,"line":1075},[1072,1805,1201],{"class":1200},[1072,1807,1204],{"class":1200},[1072,1809,1296],{"class":1207},[1072,1811,1212],{"class":1211},[1072,1813,1212],{"class":1215},[1072,1815,1280],{"class":1303},[1072,1817,1306],{"class":1215},[1072,1819,1310],{"class":1309},[1072,1821,1313],{"class":1215},[1072,1823,1824,1827,1830,1832,1835],{"class":1074,"line":1089},[1072,1825,1826],{"class":1309},"  const",[1072,1828,1829],{"class":1453}," foo",[1072,1831,1457],{"class":1082},[1072,1833,1834],{"class":1207}," useFoo",[1072,1836,1463],{"class":1221},[1072,1838,1839,1841],{"class":1074,"line":1107},[1072,1840,1266],{"class":1215},[1072,1842,1269],{"class":1211},[1024,1844,1845],{},"不过请注意一些限制和差异：",[1847,1848,1849,1859],"important",{},[1024,1850,1851,1855,1856],{},[1852,1853,1854],"strong",{},"如果一个组合式函数依赖稍后注册的另一个插件，它可能无法工作。"," ",[1857,1858],"br",{},[1024,1860,1861],{},"插件是按顺序依次调用，且先于其他一切运行。你可能会用到某个依赖尚未被调用的其它插件。",[1847,1863,1864,1871],{},[1024,1865,1866,1855,1869],{},[1852,1867,1868],{},"如果一个组合式函数依赖 Vue.js 生命周期，它无法工作。",[1857,1870],{},[1024,1872,1873,1874,1878],{},"通常，Vue.js 组合式函数绑定到当前组件实例，而插件只绑定到 ",[1181,1875,1876],{"href":484},[1028,1877,1280],{}," 实例。",[1056,1880,1881],{"id":1881},"提供辅助函数",[1024,1883,1884,1885,1889,1890,1893],{},"如果你想在 ",[1181,1886,1887],{"href":484},[1028,1888,338],{}," 实例上提供一个辅助函数，请在插件的 ",[1028,1891,1892],{},"provide"," 键下将其返回。",[1895,1896,1897,1993],"code-group",{},[1063,1898,1900],{"className":1190,"code":1899,"filename":1285,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin(() => {\n  return {\n    provide: {\n      hello: (msg: string) => `Hello ${msg}!`,\n    },\n  }\n})\n",[1028,1901,1902,1919,1926,1935,1978,1982,1987],{"__ignoreMap":354},[1072,1903,1904,1906,1908,1910,1912,1915,1917],{"class":1074,"line":1075},[1072,1905,1201],{"class":1200},[1072,1907,1204],{"class":1200},[1072,1909,1296],{"class":1207},[1072,1911,1212],{"class":1211},[1072,1913,1914],{"class":1215},"()",[1072,1916,1310],{"class":1309},[1072,1918,1313],{"class":1215},[1072,1920,1921,1924],{"class":1074,"line":1089},[1072,1922,1923],{"class":1200},"  return",[1072,1925,1313],{"class":1215},[1072,1927,1928,1931,1933],{"class":1074,"line":1107},[1072,1929,1930],{"class":1221},"    provide",[1072,1932,1225],{"class":1215},[1072,1934,1313],{"class":1215},[1072,1936,1937,1940,1942,1944,1947,1949,1953,1955,1957,1960,1963,1966,1968,1970,1973,1976],{"class":1074,"line":1117},[1072,1938,1939],{"class":1207},"      hello",[1072,1941,1225],{"class":1215},[1072,1943,1397],{"class":1215},[1072,1945,1946],{"class":1303},"msg",[1072,1948,1225],{"class":1082},[1072,1950,1952],{"class":1951},"seQRr"," string",[1072,1954,1306],{"class":1215},[1072,1956,1310],{"class":1309},[1072,1958,1959],{"class":1233}," `",[1072,1961,1962],{"class":1100},"Hello ",[1072,1964,1965],{"class":1233},"${",[1072,1967,1946],{"class":1211},[1072,1969,1266],{"class":1233},[1072,1971,1972],{"class":1100},"!",[1072,1974,1975],{"class":1233},"`",[1072,1977,1243],{"class":1215},[1072,1979,1980],{"class":1074,"line":1134},[1072,1981,1475],{"class":1215},[1072,1983,1984],{"class":1074,"line":1149},[1072,1985,1986],{"class":1215},"  }\n",[1072,1988,1989,1991],{"class":1074,"line":1416},[1072,1990,1266],{"class":1215},[1072,1992,1269],{"class":1211},[1063,1994,1997],{"className":1190,"code":1995,"filename":1996,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin({\n  name: 'hello',\n  setup () {\n    return {\n      provide: {\n        hello: (msg: string) => `Hello ${msg}!`,\n      },\n    }\n  },\n})\n","plugins\u002Fhello-object-syntax.ts",[1028,1998,1999,2011,2026,2035,2042,2051,2086,2091,2096,2100],{"__ignoreMap":354},[1072,2000,2001,2003,2005,2007,2009],{"class":1074,"line":1075},[1072,2002,1201],{"class":1200},[1072,2004,1204],{"class":1200},[1072,2006,1296],{"class":1207},[1072,2008,1212],{"class":1211},[1072,2010,1216],{"class":1215},[1072,2012,2013,2015,2017,2019,2022,2024],{"class":1074,"line":1089},[1072,2014,1354],{"class":1221},[1072,2016,1225],{"class":1215},[1072,2018,1359],{"class":1233},[1072,2020,2021],{"class":1100},"hello",[1072,2023,1240],{"class":1233},[1072,2025,1243],{"class":1215},[1072,2027,2028,2031,2033],{"class":1074,"line":1107},[1072,2029,2030],{"class":1393},"  setup",[1072,2032,1442],{"class":1215},[1072,2034,1313],{"class":1215},[1072,2036,2037,2040],{"class":1074,"line":1117},[1072,2038,2039],{"class":1200},"    return",[1072,2041,1313],{"class":1215},[1072,2043,2044,2047,2049],{"class":1074,"line":1134},[1072,2045,2046],{"class":1221},"      provide",[1072,2048,1225],{"class":1215},[1072,2050,1313],{"class":1215},[1072,2052,2053,2056,2058,2060,2062,2064,2066,2068,2070,2072,2074,2076,2078,2080,2082,2084],{"class":1074,"line":1149},[1072,2054,2055],{"class":1207},"        hello",[1072,2057,1225],{"class":1215},[1072,2059,1397],{"class":1215},[1072,2061,1946],{"class":1303},[1072,2063,1225],{"class":1082},[1072,2065,1952],{"class":1951},[1072,2067,1306],{"class":1215},[1072,2069,1310],{"class":1309},[1072,2071,1959],{"class":1233},[1072,2073,1962],{"class":1100},[1072,2075,1965],{"class":1233},[1072,2077,1946],{"class":1211},[1072,2079,1266],{"class":1233},[1072,2081,1972],{"class":1100},[1072,2083,1975],{"class":1233},[1072,2085,1243],{"class":1215},[1072,2087,2088],{"class":1074,"line":1416},[1072,2089,2090],{"class":1215},"      },\n",[1072,2092,2093],{"class":1074,"line":1426},[1072,2094,2095],{"class":1215},"    }\n",[1072,2097,2098],{"class":1074,"line":1432},[1072,2099,1413],{"class":1215},[1072,2101,2102,2104],{"class":1074,"line":1447},[1072,2103,1266],{"class":1215},[1072,2105,1269],{"class":1211},[1024,2107,2108],{},"然后你可以在组件中使用这个辅助函数：",[1063,2110,2115],{"className":2111,"code":2112,"filename":2113,"language":2114,"meta":354,"style":354},"language-vue shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","\u003Cscript setup lang=\"ts\">\n\u002F\u002F 或者，你也可以在这里使用它\nconst { $hello } = useNuxtApp()\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003Cdiv>\n    {{ $hello('world') }}\n  \u003C\u002Fdiv>\n\u003C\u002Ftemplate>\n","app\u002Fcomponents\u002FHello.vue","vue",[1028,2116,2117,2145,2150,2170,2179,2185,2194,2204,2209,2218],{"__ignoreMap":354},[1072,2118,2119,2122,2126,2129,2132,2135,2138,2140,2142],{"class":1074,"line":1075},[1072,2120,2121],{"class":1215},"\u003C",[1072,2123,2125],{"class":2124},"s6g6u","script",[1072,2127,1394],{"class":2128},"sXjFp",[1072,2130,2131],{"class":2128}," lang",[1072,2133,2134],{"class":1215},"=",[1072,2136,2137],{"class":1233},"\"",[1072,2139,1192],{"class":1100},[1072,2141,2137],{"class":1233},[1072,2143,2144],{"class":1215},">\n",[1072,2146,2147],{"class":1074,"line":1089},[1072,2148,2149],{"class":1318},"\u002F\u002F 或者，你也可以在这里使用它\n",[1072,2151,2152,2155,2158,2161,2164,2166,2168],{"class":1074,"line":1107},[1072,2153,2154],{"class":1309},"const",[1072,2156,2157],{"class":1215}," {",[1072,2159,2160],{"class":1453}," $hello",[1072,2162,2163],{"class":1215}," }",[1072,2165,1457],{"class":1082},[1072,2167,1460],{"class":1207},[1072,2169,1463],{"class":1211},[1072,2171,2172,2175,2177],{"class":1074,"line":1117},[1072,2173,2174],{"class":1215},"\u003C\u002F",[1072,2176,2125],{"class":2124},[1072,2178,2144],{"class":1215},[1072,2180,2181],{"class":1074,"line":1134},[1072,2182,2184],{"emptyLinePlaceholder":2183},true,"\n",[1072,2186,2187,2189,2192],{"class":1074,"line":1149},[1072,2188,2121],{"class":1215},[1072,2190,2191],{"class":2124},"template",[1072,2193,2144],{"class":1215},[1072,2195,2196,2199,2202],{"class":1074,"line":1416},[1072,2197,2198],{"class":1215},"  \u003C",[1072,2200,2201],{"class":2124},"div",[1072,2203,2144],{"class":1215},[1072,2205,2206],{"class":1074,"line":1426},[1072,2207,2208],{"class":1211},"    {{ $hello('world') }}\n",[1072,2210,2211,2214,2216],{"class":1074,"line":1432},[1072,2212,2213],{"class":1215},"  \u003C\u002F",[1072,2215,2201],{"class":2124},[1072,2217,2144],{"class":1215},[1072,2219,2220,2222,2224],{"class":1074,"line":1447},[1072,2221,2174],{"class":1215},[1072,2223,2191],{"class":2124},[1072,2225,2144],{"class":1215},[1847,2227,2228],{},[1024,2229,2230,2231,2233],{},"请注意，我们强烈建议使用",[1181,2232,1790],{"href":93},"而非提供辅助函数，以避免污染全局命名空间，并保持你的主包入口体积较小。",[2235,2236,2237],"warning",{},[1024,2238,2239,1855,2253,2255,2256,2262],{},[1852,2240,2241,2242,1050,2245,2248,2249,2252],{},"如果你的插件提供一个 ",[1028,2243,2244],{},"ref",[1028,2246,2247],{},"computed","，它在组件的 ",[1028,2250,2251],{},"\u003Ctemplate>"," 中不会被自动解包。",[1857,2254],{},"\n这是由于 Vue 对非模板顶层 ref 的处理方式所致。你可以在 ",[1181,2257,2261],{"href":2258,"rel":2259},"https:\u002F\u002Fvuejs.org\u002Fguide\u002Fessentials\u002Freactivity-fundamentals#caveat-when-unwrapping-in-templates",[2260],"nofollow","Vue 文档"," 中阅读更多内容。",[1056,2264,2265],{"id":2265},"插件类型",[1024,2267,2268,2269,2272],{},"如果你从插件中返回辅助函数，它们会被自动推断类型；你可以在 ",[1028,2270,2271],{},"useNuxtApp()"," 的返回值以及你的模板中发现它们已被正确类型化。",[1033,2274,2275],{},[1024,2276,2277,2278,2282],{},"如果你需要在_另一个插件内部_使用某个已提供的辅助函数，可以调用 ",[1181,2279,2280],{"href":484},[1028,2281,2271],{}," 来获取类型化的版本。不过一般来说，除非你确定插件的顺序，否则应避免这样做。",[1024,2284,2285],{},"对于高级用例，你可以像这样声明注入属性的类型：",[1063,2287,2290],{"className":1190,"code":2288,"filename":2289,"language":1192,"meta":354,"style":354},"declare module '#app' {\n  interface NuxtApp {\n    $hello (msg: string): string\n  }\n}\n\ndeclare module 'vue' {\n  interface ComponentCustomProperties {\n    $hello (msg: string): string\n  }\n}\n\nexport {}\n","index.d.ts",[1028,2291,2292,2309,2319,2339,2343,2348,2352,2366,2375,2393,2397,2401,2405],{"__ignoreMap":354},[1072,2293,2294,2297,2300,2302,2305,2307],{"class":1074,"line":1075},[1072,2295,2296],{"class":1309},"declare",[1072,2298,2299],{"class":1309}," module",[1072,2301,1359],{"class":1233},[1072,2303,2304],{"class":1100},"#app",[1072,2306,1240],{"class":1233},[1072,2308,1313],{"class":1215},[1072,2310,2311,2314,2317],{"class":1074,"line":1089},[1072,2312,2313],{"class":1309},"  interface",[1072,2315,2316],{"class":1078}," NuxtApp",[1072,2318,1313],{"class":1215},[1072,2320,2321,2324,2326,2328,2330,2332,2334,2336],{"class":1074,"line":1107},[1072,2322,2323],{"class":1393},"    $hello",[1072,2325,1397],{"class":1215},[1072,2327,1946],{"class":1303},[1072,2329,1225],{"class":1082},[1072,2331,1952],{"class":1951},[1072,2333,1306],{"class":1215},[1072,2335,1225],{"class":1082},[1072,2337,2338],{"class":1951}," string\n",[1072,2340,2341],{"class":1074,"line":1117},[1072,2342,1986],{"class":1215},[1072,2344,2345],{"class":1074,"line":1134},[1072,2346,2347],{"class":1215},"}\n",[1072,2349,2350],{"class":1074,"line":1149},[1072,2351,2184],{"emptyLinePlaceholder":2183},[1072,2353,2354,2356,2358,2360,2362,2364],{"class":1074,"line":1416},[1072,2355,2296],{"class":1309},[1072,2357,2299],{"class":1309},[1072,2359,1359],{"class":1233},[1072,2361,2114],{"class":1100},[1072,2363,1240],{"class":1233},[1072,2365,1313],{"class":1215},[1072,2367,2368,2370,2373],{"class":1074,"line":1426},[1072,2369,2313],{"class":1309},[1072,2371,2372],{"class":1078}," ComponentCustomProperties",[1072,2374,1313],{"class":1215},[1072,2376,2377,2379,2381,2383,2385,2387,2389,2391],{"class":1074,"line":1432},[1072,2378,2323],{"class":1393},[1072,2380,1397],{"class":1215},[1072,2382,1946],{"class":1303},[1072,2384,1225],{"class":1082},[1072,2386,1952],{"class":1951},[1072,2388,1306],{"class":1215},[1072,2390,1225],{"class":1082},[1072,2392,2338],{"class":1951},[1072,2394,2395],{"class":1074,"line":1447},[1072,2396,1986],{"class":1215},[1072,2398,2399],{"class":1074,"line":1466},[1072,2400,2347],{"class":1215},[1072,2402,2403],{"class":1074,"line":1472},[1072,2404,2184],{"emptyLinePlaceholder":2183},[1072,2406,2407,2409],{"class":1074,"line":1478},[1072,2408,1201],{"class":1200},[1072,2410,2411],{"class":1215}," {}\n",[1056,2413,2415],{"id":2414},"vue-插件","Vue 插件",[1024,2417,2418,2419,2424],{},"如果你想使用 Vue 插件（例如 ",[1181,2420,2423],{"href":2421,"rel":2422},"https:\u002F\u002Fgithub.com\u002FMatteoGabriele\u002Fvue-gtag",[2260],"vue-gtag"," 来添加 Google Analytics 标签），可以使用 Nuxt 插件来做到。",[1024,2426,2427],{},"首先，安装 Vue 插件依赖：",[1895,2429,2431,2451,2469,2486,2502],{"sync":2430},"pm",[1063,2432,2435],{"className":1065,"code":2433,"filename":2434,"language":1068,"meta":354,"style":354},"npm install --save-dev vue-gtag-next\n","npm",[1028,2436,2437],{"__ignoreMap":354},[1072,2438,2439,2441,2444,2448],{"class":1074,"line":1075},[1072,2440,2434],{"class":1078},[1072,2442,2443],{"class":1100}," install",[1072,2445,2447],{"class":2446},"supr-"," --save-dev",[1072,2449,2450],{"class":1100}," vue-gtag-next\n",[1063,2452,2455],{"className":1065,"code":2453,"filename":2454,"language":1068,"meta":354,"style":354},"yarn add --dev vue-gtag-next\n","yarn",[1028,2456,2457],{"__ignoreMap":354},[1072,2458,2459,2461,2464,2467],{"class":1074,"line":1075},[1072,2460,2454],{"class":1078},[1072,2462,2463],{"class":1100}," add",[1072,2465,2466],{"class":2446}," --dev",[1072,2468,2450],{"class":1100},[1063,2470,2473],{"className":1065,"code":2471,"filename":2472,"language":1068,"meta":354,"style":354},"pnpm add -D vue-gtag-next\n","pnpm",[1028,2474,2475],{"__ignoreMap":354},[1072,2476,2477,2479,2481,2484],{"class":1074,"line":1075},[1072,2478,2472],{"class":1078},[1072,2480,2463],{"class":1100},[1072,2482,2483],{"class":2446}," -D",[1072,2485,2450],{"class":1100},[1063,2487,2490],{"className":1065,"code":2488,"filename":2489,"language":1068,"meta":354,"style":354},"bun add -D vue-gtag-next\n","bun",[1028,2491,2492],{"__ignoreMap":354},[1072,2493,2494,2496,2498,2500],{"class":1074,"line":1075},[1072,2495,2489],{"class":1078},[1072,2497,2463],{"class":1100},[1072,2499,2483],{"class":2446},[1072,2501,2450],{"class":1100},[1063,2503,2506],{"className":1065,"code":2504,"filename":2505,"language":1068,"meta":354,"style":354},"deno add -D npm:vue-gtag-next\n","deno",[1028,2507,2508],{"__ignoreMap":354},[1072,2509,2510,2512,2514,2516],{"class":1074,"line":1075},[1072,2511,2505],{"class":1078},[1072,2513,2463],{"class":1100},[1072,2515,2483],{"class":2446},[1072,2517,2518],{"class":1100}," npm:vue-gtag-next\n",[1024,2520,2521],{},"然后创建一个插件文件：",[1063,2523,2526],{"className":1190,"code":2524,"filename":2525,"language":1192,"meta":354,"style":354},"import VueGtag, { trackRouter } from 'vue-gtag-next'\n\nexport default defineNuxtPlugin((nuxtApp) => {\n  nuxtApp.vueApp.use(VueGtag, {\n    property: {\n      id: 'GA_MEASUREMENT_ID',\n    },\n  })\n  trackRouter(useRouter())\n})\n","app\u002Fplugins\u002Fvue-gtag.client.ts",[1028,2527,2528,2556,2560,2580,2605,2614,2630,2634,2641,2653],{"__ignoreMap":354},[1072,2529,2530,2533,2536,2538,2540,2543,2545,2548,2550,2553],{"class":1074,"line":1075},[1072,2531,2532],{"class":1200},"import",[1072,2534,2535],{"class":1211}," VueGtag",[1072,2537,1382],{"class":1215},[1072,2539,2157],{"class":1215},[1072,2541,2542],{"class":1211}," trackRouter",[1072,2544,2163],{"class":1215},[1072,2546,2547],{"class":1200}," from",[1072,2549,1359],{"class":1233},[1072,2551,2552],{"class":1100},"vue-gtag-next",[1072,2554,2555],{"class":1233},"'\n",[1072,2557,2558],{"class":1074,"line":1089},[1072,2559,2184],{"emptyLinePlaceholder":2183},[1072,2561,2562,2564,2566,2568,2570,2572,2574,2576,2578],{"class":1074,"line":1107},[1072,2563,1201],{"class":1200},[1072,2565,1204],{"class":1200},[1072,2567,1296],{"class":1207},[1072,2569,1212],{"class":1211},[1072,2571,1212],{"class":1215},[1072,2573,1280],{"class":1303},[1072,2575,1306],{"class":1215},[1072,2577,1310],{"class":1309},[1072,2579,1313],{"class":1215},[1072,2581,2582,2585,2588,2591,2593,2596,2598,2601,2603],{"class":1074,"line":1117},[1072,2583,2584],{"class":1211},"  nuxtApp",[1072,2586,2587],{"class":1215},".",[1072,2589,2590],{"class":1211},"vueApp",[1072,2592,2587],{"class":1215},[1072,2594,2595],{"class":1207},"use",[1072,2597,1212],{"class":1221},[1072,2599,2600],{"class":1211},"VueGtag",[1072,2602,1382],{"class":1215},[1072,2604,1313],{"class":1215},[1072,2606,2607,2610,2612],{"class":1074,"line":1134},[1072,2608,2609],{"class":1221},"    property",[1072,2611,1225],{"class":1215},[1072,2613,1313],{"class":1215},[1072,2615,2616,2619,2621,2623,2626,2628],{"class":1074,"line":1149},[1072,2617,2618],{"class":1221},"      id",[1072,2620,1225],{"class":1215},[1072,2622,1359],{"class":1233},[1072,2624,2625],{"class":1100},"GA_MEASUREMENT_ID",[1072,2627,1240],{"class":1233},[1072,2629,1243],{"class":1215},[1072,2631,2632],{"class":1074,"line":1416},[1072,2633,1475],{"class":1215},[1072,2635,2636,2639],{"class":1074,"line":1426},[1072,2637,2638],{"class":1215},"  }",[1072,2640,1269],{"class":1221},[1072,2642,2643,2646,2648,2650],{"class":1074,"line":1432},[1072,2644,2645],{"class":1207},"  trackRouter",[1072,2647,1212],{"class":1221},[1072,2649,529],{"class":1207},[1072,2651,2652],{"class":1221},"())\n",[1072,2654,2655,2657],{"class":1074,"line":1447},[1072,2656,1266],{"class":1215},[1072,2658,1269],{"class":1211},[1056,2660,2662],{"id":2661},"vue-指令","Vue 指令",[1024,2664,2665],{},"类似地，你可以在插件中注册一个自定义 Vue 指令。",[1063,2667,2670],{"className":1190,"code":2668,"filename":2669,"language":1192,"meta":1193,"style":354},"export default defineNuxtPlugin((nuxtApp) => {\n  nuxtApp.vueApp.directive('focus', {\n    mounted (el) {\n      el.focus()\n    },\n    getSSRProps (binding, vnode) {\n      \u002F\u002F 你可以在这里提供服务端渲染（SSR）特定的 props\n      return {}\n    },\n  })\n})\n","plugins\u002Fmy-directive.ts",[1028,2671,2672,2692,2718,2732,2743,2747,2766,2771,2778,2782,2788],{"__ignoreMap":354},[1072,2673,2674,2676,2678,2680,2682,2684,2686,2688,2690],{"class":1074,"line":1075},[1072,2675,1201],{"class":1200},[1072,2677,1204],{"class":1200},[1072,2679,1296],{"class":1207},[1072,2681,1212],{"class":1211},[1072,2683,1212],{"class":1215},[1072,2685,1280],{"class":1303},[1072,2687,1306],{"class":1215},[1072,2689,1310],{"class":1309},[1072,2691,1313],{"class":1215},[1072,2693,2694,2696,2698,2700,2702,2705,2707,2709,2712,2714,2716],{"class":1074,"line":1089},[1072,2695,2584],{"class":1211},[1072,2697,2587],{"class":1215},[1072,2699,2590],{"class":1211},[1072,2701,2587],{"class":1215},[1072,2703,2704],{"class":1207},"directive",[1072,2706,1212],{"class":1221},[1072,2708,1240],{"class":1233},[1072,2710,2711],{"class":1100},"focus",[1072,2713,1240],{"class":1233},[1072,2715,1382],{"class":1215},[1072,2717,1313],{"class":1215},[1072,2719,2720,2723,2725,2728,2730],{"class":1074,"line":1107},[1072,2721,2722],{"class":1393},"    mounted",[1072,2724,1397],{"class":1215},[1072,2726,2727],{"class":1303},"el",[1072,2729,1306],{"class":1215},[1072,2731,1313],{"class":1215},[1072,2733,2734,2737,2739,2741],{"class":1074,"line":1117},[1072,2735,2736],{"class":1211},"      el",[1072,2738,2587],{"class":1215},[1072,2740,2711],{"class":1207},[1072,2742,1463],{"class":1221},[1072,2744,2745],{"class":1074,"line":1134},[1072,2746,1475],{"class":1215},[1072,2748,2749,2752,2754,2757,2759,2762,2764],{"class":1074,"line":1149},[1072,2750,2751],{"class":1393},"    getSSRProps",[1072,2753,1397],{"class":1215},[1072,2755,2756],{"class":1303},"binding",[1072,2758,1382],{"class":1215},[1072,2760,2761],{"class":1303}," vnode",[1072,2763,1306],{"class":1215},[1072,2765,1313],{"class":1215},[1072,2767,2768],{"class":1074,"line":1416},[1072,2769,2770],{"class":1318},"      \u002F\u002F 你可以在这里提供服务端渲染（SSR）特定的 props\n",[1072,2772,2773,2776],{"class":1074,"line":1426},[1072,2774,2775],{"class":1200},"      return",[1072,2777,2411],{"class":1215},[1072,2779,2780],{"class":1074,"line":1432},[1072,2781,1475],{"class":1215},[1072,2783,2784,2786],{"class":1074,"line":1447},[1072,2785,2638],{"class":1215},[1072,2787,1269],{"class":1221},[1072,2789,2790,2792],{"class":1074,"line":1466},[1072,2791,1266],{"class":1215},[1072,2793,1269],{"class":1211},[2235,2795,2796],{},[1024,2797,2798,2799,2802,2803,2806],{},"如果你注册了一个 Vue 指令，你_必须_在服务端和客户端同时注册它，除非你只在某一侧渲染时使用它。如果该指令只在客户端有意义，你可以将它移到 ",[1028,2800,2801],{},"~\u002Fplugins\u002Fmy-directive.client.ts","，并在 ",[1028,2804,2805],{},"~\u002Fplugins\u002Fmy-directive.server.ts"," 中为其提供一个服务端「桩」指令。",[2808,2809],"read-more",{"icon":2810,"target":2811,"title":2812,"to":2813},"i-simple-icons-vuedotjs","_blank","Vue 文档中的自定义指令","https:\u002F\u002Fvuejs.org\u002Fguide\u002Freusability\u002Fcustom-directives.html",[2815,2816,2817],"style",{},"html pre.shiki code .sJK67, html code.shiki .sJK67{--shiki-light:#E2931D;--shiki-default:#B392F0;--shiki-dark:#FFCB6B}html pre.shiki code .sXPRQ, html code.shiki .sXPRQ{--shiki-light:#39ADB5;--shiki-default:#F97583;--shiki-dark:#89DDFF}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 .s0jeK, html code.shiki .s0jeK{--shiki-light:#39ADB5;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}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 .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 .syA7L, html code.shiki .syA7L{--shiki-light:#E53935;--shiki-default:#B392F0;--shiki-dark:#F07178}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 .seQRr, html code.shiki .seQRr{--shiki-light:#E2931D;--shiki-default:#79B8FF;--shiki-dark:#FFCB6B}html pre.shiki code .s6g6u, html code.shiki .s6g6u{--shiki-light:#E53935;--shiki-default:#85E89D;--shiki-dark:#F07178}html pre.shiki code .sXjFp, html code.shiki .sXjFp{--shiki-light:#9C3EDA;--shiki-default:#B392F0;--shiki-dark:#C792EA}html pre.shiki code .supr-, html code.shiki .supr-{--shiki-light:#91B859;--shiki-default:#79B8FF;--shiki-dark:#C3E88D}",{"title":354,"searchDepth":1107,"depth":1107,"links":2819},[2820,2821,2824,2825,2829,2830,2831,2832,2833],{"id":1058,"depth":1089,"text":1058},{"id":1272,"depth":1089,"text":1272,"children":2822},[2823],{"id":1329,"depth":1107,"text":1329},{"id":1539,"depth":1089,"text":1539},{"id":1606,"depth":1089,"text":1606,"children":2826},[2827,2828],{"id":1609,"depth":1107,"text":1609},{"id":1691,"depth":1107,"text":1691},{"id":1784,"depth":1089,"text":1784},{"id":1881,"depth":1089,"text":1881},{"id":2265,"depth":1089,"text":2265},{"id":2414,"depth":1089,"text":2415},{"id":2661,"depth":1089,"text":2662},"md",{"head":2836},{"title":2837},"plugins\u002F","[object Object]",{"title":110,"description":111},"docs\u002F2.directory-structure\u002F1.app\u002F1.plugins","2OxzkpFrYHXdM1ndRiSUFZZA2sdTTW8KNLadtgxDb0k",1785179850249]