[{"data":1,"prerenderedAt":3175},["ShallowReactive",2],{"docs-all-flat":3,"docs-\u002Fdocs\u002Fguide\u002Fmodules\u002Frecipes-advanced":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":270,"body":1020,"description":271,"extension":3169,"meta":3170,"navigation":3171,"path":269,"seo":3172,"stem":3173,"__hash__":3174},"docs\u002Fdocs\u002F3.guide\u002F4.modules\u002F5.recipes-advanced.md",{"type":1021,"value":1022,"toc":3155},"minimark",[1023,1027,1031,1042,1329,3151],[1024,1025,1026],"p",{},"以下是一些编写模块的高级模式，包括钩子、模板和类型增强。",[1028,1029,1030],"h2",{"id":1030},"使用生命周期钩子",[1024,1032,1033,1036,1037,1041],{},[1034,1035,330],"a",{"href":329}," 让你可以扩展 Nuxt 的几乎每个方面。模块可以通过编程方式钩入它们，或通过定义中的 ",[1038,1039,1040],"code",{},"hooks"," 映射来钩入。",[1043,1044,1048],"pre",{"className":1045,"code":1046,"language":1047,"meta":354,"style":354},"language-js shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","import { addPlugin, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  \u002F\u002F 通过 `hooks` 映射钩入 `app:error` 钩子\n  hooks: {\n    'app:error': (err) => {\n      console.info(`This error happened: ${err}`)\n    },\n  },\n  setup (options, nuxt) {\n    \u002F\u002F 通过编程方式钩入 `pages:extend` 钩子\n    nuxt.hook('pages:extend', (pages) => {\n      console.info(`Discovered ${pages.length} pages`)\n    })\n  },\n})\n","js",[1038,1049,1050,1095,1102,1120,1127,1140,1171,1202,1208,1214,1235,1241,1273,1309,1317,1322],{"__ignoreMap":354},[1051,1052,1055,1059,1063,1067,1070,1073,1075,1078,1081,1084,1088,1092],"span",{"class":1053,"line":1054},"line",1,[1051,1056,1058],{"class":1057},"szyBz","import",[1051,1060,1062],{"class":1061},"sF54B"," {",[1051,1064,1066],{"class":1065},"smVNa"," addPlugin",[1051,1068,1069],{"class":1061},",",[1051,1071,1072],{"class":1065}," createResolver",[1051,1074,1069],{"class":1061},[1051,1076,1077],{"class":1065}," defineNuxtModule",[1051,1079,1080],{"class":1061}," }",[1051,1082,1083],{"class":1057}," from",[1051,1085,1087],{"class":1086},"s0jeK"," '",[1051,1089,1091],{"class":1090},"s-Aze","@nuxt\u002Fkit",[1051,1093,1094],{"class":1086},"'\n",[1051,1096,1098],{"class":1053,"line":1097},2,[1051,1099,1101],{"emptyLinePlaceholder":1100},true,"\n",[1051,1103,1105,1108,1111,1114,1117],{"class":1053,"line":1104},3,[1051,1106,1107],{"class":1057},"export",[1051,1109,1110],{"class":1057}," default",[1051,1112,1077],{"class":1113},"srJn9",[1051,1115,1116],{"class":1065},"(",[1051,1118,1119],{"class":1061},"{\n",[1051,1121,1123],{"class":1053,"line":1122},4,[1051,1124,1126],{"class":1125},"sZqJ9","  \u002F\u002F 通过 `hooks` 映射钩入 `app:error` 钩子\n",[1051,1128,1130,1134,1137],{"class":1053,"line":1129},5,[1051,1131,1133],{"class":1132},"sOtFm","  hooks",[1051,1135,1136],{"class":1061},":",[1051,1138,1139],{"class":1061}," {\n",[1051,1141,1143,1146,1150,1153,1155,1158,1162,1165,1169],{"class":1053,"line":1142},6,[1051,1144,1145],{"class":1086},"    '",[1051,1147,1149],{"class":1148},"sSD0A","app:error",[1051,1151,1152],{"class":1086},"'",[1051,1154,1136],{"class":1061},[1051,1156,1157],{"class":1061}," (",[1051,1159,1161],{"class":1160},"ssIVr","err",[1051,1163,1164],{"class":1061},")",[1051,1166,1168],{"class":1167},"sV7Px"," =>",[1051,1170,1139],{"class":1061},[1051,1172,1174,1177,1180,1183,1185,1188,1191,1194,1196,1199],{"class":1053,"line":1173},7,[1051,1175,1176],{"class":1065},"      console",[1051,1178,1179],{"class":1061},".",[1051,1181,1182],{"class":1113},"info",[1051,1184,1116],{"class":1132},[1051,1186,1187],{"class":1086},"`",[1051,1189,1190],{"class":1090},"This error happened: ",[1051,1192,1193],{"class":1086},"${",[1051,1195,1161],{"class":1065},[1051,1197,1198],{"class":1086},"}`",[1051,1200,1201],{"class":1132},")\n",[1051,1203,1205],{"class":1053,"line":1204},8,[1051,1206,1207],{"class":1061},"    },\n",[1051,1209,1211],{"class":1053,"line":1210},9,[1051,1212,1213],{"class":1061},"  },\n",[1051,1215,1217,1221,1223,1226,1228,1231,1233],{"class":1053,"line":1216},10,[1051,1218,1220],{"class":1219},"syA7L","  setup",[1051,1222,1157],{"class":1061},[1051,1224,1225],{"class":1160},"options",[1051,1227,1069],{"class":1061},[1051,1229,1230],{"class":1160}," nuxt",[1051,1232,1164],{"class":1061},[1051,1234,1139],{"class":1061},[1051,1236,1238],{"class":1053,"line":1237},11,[1051,1239,1240],{"class":1125},"    \u002F\u002F 通过编程方式钩入 `pages:extend` 钩子\n",[1051,1242,1244,1247,1249,1252,1254,1256,1259,1261,1263,1265,1267,1269,1271],{"class":1053,"line":1243},12,[1051,1245,1246],{"class":1065},"    nuxt",[1051,1248,1179],{"class":1061},[1051,1250,1251],{"class":1113},"hook",[1051,1253,1116],{"class":1132},[1051,1255,1152],{"class":1086},[1051,1257,1258],{"class":1090},"pages:extend",[1051,1260,1152],{"class":1086},[1051,1262,1069],{"class":1061},[1051,1264,1157],{"class":1061},[1051,1266,106],{"class":1160},[1051,1268,1164],{"class":1061},[1051,1270,1168],{"class":1167},[1051,1272,1139],{"class":1061},[1051,1274,1276,1278,1280,1282,1284,1286,1289,1291,1293,1295,1299,1302,1305,1307],{"class":1053,"line":1275},13,[1051,1277,1176],{"class":1065},[1051,1279,1179],{"class":1061},[1051,1281,1182],{"class":1113},[1051,1283,1116],{"class":1132},[1051,1285,1187],{"class":1086},[1051,1287,1288],{"class":1090},"Discovered ",[1051,1290,1193],{"class":1086},[1051,1292,106],{"class":1065},[1051,1294,1179],{"class":1086},[1051,1296,1298],{"class":1297},"sJTDI","length",[1051,1300,1301],{"class":1086},"}",[1051,1303,1304],{"class":1090}," pages",[1051,1306,1187],{"class":1086},[1051,1308,1201],{"class":1132},[1051,1310,1312,1315],{"class":1053,"line":1311},14,[1051,1313,1314],{"class":1061},"    }",[1051,1316,1201],{"class":1132},[1051,1318,1320],{"class":1053,"line":1319},15,[1051,1321,1213],{"class":1061},[1051,1323,1325,1327],{"class":1053,"line":1324},16,[1051,1326,1301],{"class":1061},[1051,1328,1201],{"class":1065},[1330,1331,1332,1341,1472,1476,1479,1490,1713,1716,1723,1850,1856,1980,1983,1990,2115,2118,2129,2135,2300,2307,2400,2404,2407,2410,2707,2717,2956,2975,2978,2985,3016,3101,3104,3109,3120,3132],"read-more",{"to":807},[1333,1334,1338],"tip",{"icon":1335,"target":1336,"to":1337},"i-lucide-video","_blank","https:\u002F\u002Fvueschool.io\u002Flessons\u002Fnuxt-lifecycle-hooks?friend=nuxt",[1024,1339,1340],{},"观看 Vue School 关于在模块中使用 Nuxt 生命周期钩子的视频。",[1342,1343,1344,1350,1353,1355,1362],"note",{},[1024,1345,1346],{},[1347,1348,1349],"strong",{},"模块清理",[1351,1352],"br",{},[1351,1354],{},[1024,1356,1357,1358,1361],{},"如果你的模块打开、处理或启动了一个 watcher，你应该在 Nuxt 生命周期结束时关闭它。",[1038,1359,1360],{},"close"," 钩子可用于此。",[1043,1363,1367],{"className":1364,"code":1365,"language":1366,"meta":354,"style":354},"language-ts shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","import { defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    nuxt.hook('close', async (nuxt) => {\n      \u002F\u002F 你的自定义代码放在这里\n    })\n  },\n})\n","ts",[1038,1368,1369,1387,1391,1403,1419,1451,1456,1462,1466],{"__ignoreMap":354},[1051,1370,1371,1373,1375,1377,1379,1381,1383,1385],{"class":1053,"line":1054},[1051,1372,1058],{"class":1057},[1051,1374,1062],{"class":1061},[1051,1376,1077],{"class":1065},[1051,1378,1080],{"class":1061},[1051,1380,1083],{"class":1057},[1051,1382,1087],{"class":1086},[1051,1384,1091],{"class":1090},[1051,1386,1094],{"class":1086},[1051,1388,1389],{"class":1053,"line":1097},[1051,1390,1101],{"emptyLinePlaceholder":1100},[1051,1392,1393,1395,1397,1399,1401],{"class":1053,"line":1104},[1051,1394,1107],{"class":1057},[1051,1396,1110],{"class":1057},[1051,1398,1077],{"class":1113},[1051,1400,1116],{"class":1065},[1051,1402,1119],{"class":1061},[1051,1404,1405,1407,1409,1411,1413,1415,1417],{"class":1053,"line":1122},[1051,1406,1220],{"class":1219},[1051,1408,1157],{"class":1061},[1051,1410,1225],{"class":1160},[1051,1412,1069],{"class":1061},[1051,1414,1230],{"class":1160},[1051,1416,1164],{"class":1061},[1051,1418,1139],{"class":1061},[1051,1420,1421,1423,1425,1427,1429,1431,1433,1435,1437,1440,1442,1445,1447,1449],{"class":1053,"line":1129},[1051,1422,1246],{"class":1065},[1051,1424,1179],{"class":1061},[1051,1426,1251],{"class":1113},[1051,1428,1116],{"class":1132},[1051,1430,1152],{"class":1086},[1051,1432,1360],{"class":1090},[1051,1434,1152],{"class":1086},[1051,1436,1069],{"class":1061},[1051,1438,1439],{"class":1167}," async",[1051,1441,1157],{"class":1061},[1051,1443,1444],{"class":1160},"nuxt",[1051,1446,1164],{"class":1061},[1051,1448,1168],{"class":1167},[1051,1450,1139],{"class":1061},[1051,1452,1453],{"class":1053,"line":1142},[1051,1454,1455],{"class":1125},"      \u002F\u002F 你的自定义代码放在这里\n",[1051,1457,1458,1460],{"class":1053,"line":1173},[1051,1459,1314],{"class":1061},[1051,1461,1201],{"class":1132},[1051,1463,1464],{"class":1053,"line":1204},[1051,1465,1213],{"class":1061},[1051,1467,1468,1470],{"class":1053,"line":1210},[1051,1469,1301],{"class":1061},[1051,1471,1201],{"class":1065},[1473,1474,1475],"h3",{"id":1475},"创建自定义钩子",[1024,1477,1478],{},"模块也可以定义并调用自己的钩子，这是一种让你的模块可扩展的强大模式。",[1024,1480,1481,1482,1485,1486,1489],{},"如果你希望其它模块能够订阅你模块的钩子，你应该在 ",[1038,1483,1484],{},"modules:done"," 钩子中调用它们。这确保所有其它模块都有机会被设置，并在它们自己的 ",[1038,1487,1488],{},"setup"," 函数中注册它们对你钩子的监听器。",[1043,1491,1493],{"className":1364,"code":1492,"language":1366,"meta":354,"style":354},"\u002F\u002F my-module\u002Fmodule.ts\nimport { defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport interface ModuleHooks {\n  'my-module:custom-hook': (payload: { foo: string }) => void\n}\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    \u002F\u002F 在 `modules:done` 中调用你的钩子\n    nuxt.hook('modules:done', async () => {\n      const payload = { foo: 'bar' }\n      await nuxt.callHook('my-module:custom-hook', payload)\n    })\n  },\n})\n",[1038,1494,1495,1500,1518,1522,1535,1575,1580,1584,1596,1612,1617,1644,1671,1697,1703,1707],{"__ignoreMap":354},[1051,1496,1497],{"class":1053,"line":1054},[1051,1498,1499],{"class":1125},"\u002F\u002F my-module\u002Fmodule.ts\n",[1051,1501,1502,1504,1506,1508,1510,1512,1514,1516],{"class":1053,"line":1097},[1051,1503,1058],{"class":1057},[1051,1505,1062],{"class":1061},[1051,1507,1077],{"class":1065},[1051,1509,1080],{"class":1061},[1051,1511,1083],{"class":1057},[1051,1513,1087],{"class":1086},[1051,1515,1091],{"class":1090},[1051,1517,1094],{"class":1086},[1051,1519,1520],{"class":1053,"line":1104},[1051,1521,1101],{"emptyLinePlaceholder":1100},[1051,1523,1524,1526,1529,1533],{"class":1053,"line":1122},[1051,1525,1107],{"class":1057},[1051,1527,1528],{"class":1167}," interface",[1051,1530,1532],{"class":1531},"sJK67"," ModuleHooks",[1051,1534,1139],{"class":1061},[1051,1536,1537,1540,1543,1545,1548,1550,1553,1555,1557,1561,1563,1567,1570,1572],{"class":1053,"line":1129},[1051,1538,1539],{"class":1086},"  '",[1051,1541,1542],{"class":1090},"my-module:custom-hook",[1051,1544,1152],{"class":1086},[1051,1546,1136],{"class":1547},"sXPRQ",[1051,1549,1157],{"class":1061},[1051,1551,1552],{"class":1160},"payload",[1051,1554,1136],{"class":1547},[1051,1556,1062],{"class":1061},[1051,1558,1560],{"class":1559},"sP6_D"," foo",[1051,1562,1136],{"class":1547},[1051,1564,1566],{"class":1565},"seQRr"," string",[1051,1568,1569],{"class":1061}," })",[1051,1571,1168],{"class":1167},[1051,1573,1574],{"class":1565}," void\n",[1051,1576,1577],{"class":1053,"line":1142},[1051,1578,1579],{"class":1061},"}\n",[1051,1581,1582],{"class":1053,"line":1173},[1051,1583,1101],{"emptyLinePlaceholder":1100},[1051,1585,1586,1588,1590,1592,1594],{"class":1053,"line":1204},[1051,1587,1107],{"class":1057},[1051,1589,1110],{"class":1057},[1051,1591,1077],{"class":1113},[1051,1593,1116],{"class":1065},[1051,1595,1119],{"class":1061},[1051,1597,1598,1600,1602,1604,1606,1608,1610],{"class":1053,"line":1210},[1051,1599,1220],{"class":1219},[1051,1601,1157],{"class":1061},[1051,1603,1225],{"class":1160},[1051,1605,1069],{"class":1061},[1051,1607,1230],{"class":1160},[1051,1609,1164],{"class":1061},[1051,1611,1139],{"class":1061},[1051,1613,1614],{"class":1053,"line":1216},[1051,1615,1616],{"class":1125},"    \u002F\u002F 在 `modules:done` 中调用你的钩子\n",[1051,1618,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1640,1642],{"class":1053,"line":1237},[1051,1620,1246],{"class":1065},[1051,1622,1179],{"class":1061},[1051,1624,1251],{"class":1113},[1051,1626,1116],{"class":1132},[1051,1628,1152],{"class":1086},[1051,1630,1484],{"class":1090},[1051,1632,1152],{"class":1086},[1051,1634,1069],{"class":1061},[1051,1636,1439],{"class":1167},[1051,1638,1639],{"class":1061}," ()",[1051,1641,1168],{"class":1167},[1051,1643,1139],{"class":1061},[1051,1645,1646,1649,1652,1655,1657,1659,1661,1663,1666,1668],{"class":1053,"line":1243},[1051,1647,1648],{"class":1167},"      const",[1051,1650,1651],{"class":1297}," payload",[1051,1653,1654],{"class":1547}," =",[1051,1656,1062],{"class":1061},[1051,1658,1560],{"class":1132},[1051,1660,1136],{"class":1061},[1051,1662,1087],{"class":1086},[1051,1664,1665],{"class":1090},"bar",[1051,1667,1152],{"class":1086},[1051,1669,1670],{"class":1061}," }\n",[1051,1672,1673,1676,1678,1680,1683,1685,1687,1689,1691,1693,1695],{"class":1053,"line":1275},[1051,1674,1675],{"class":1057},"      await",[1051,1677,1230],{"class":1065},[1051,1679,1179],{"class":1061},[1051,1681,1682],{"class":1113},"callHook",[1051,1684,1116],{"class":1132},[1051,1686,1152],{"class":1086},[1051,1688,1542],{"class":1090},[1051,1690,1152],{"class":1086},[1051,1692,1069],{"class":1061},[1051,1694,1651],{"class":1065},[1051,1696,1201],{"class":1132},[1051,1698,1699,1701],{"class":1053,"line":1311},[1051,1700,1314],{"class":1061},[1051,1702,1201],{"class":1132},[1051,1704,1705],{"class":1053,"line":1319},[1051,1706,1213],{"class":1061},[1051,1708,1709,1711],{"class":1053,"line":1324},[1051,1710,1301],{"class":1061},[1051,1712,1201],{"class":1065},[1028,1714,1715],{"id":1715},"添加虚拟文件",[1024,1717,1718,1719,1722],{},"如果你需要添加一个可以导入到用户应用中的虚拟文件，你可以使用 ",[1038,1720,1721],{},"addTemplate"," 工具函数。",[1043,1724,1726],{"className":1364,"code":1725,"language":1366,"meta":354,"style":354},"import { addTemplate, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    \u002F\u002F 该文件被添加到 Nuxt 内部的虚拟文件系统，可以从 '#build\u002Fmy-module-feature.mjs' 导入\n    addTemplate({\n      filename: 'my-module-feature.mjs',\n      getContents: () => 'export const myModuleFeature = () => \"hello world !\"',\n    })\n  },\n})\n",[1038,1727,1728,1751,1755,1767,1783,1788,1797,1814,1834,1840,1844],{"__ignoreMap":354},[1051,1729,1730,1732,1734,1737,1739,1741,1743,1745,1747,1749],{"class":1053,"line":1054},[1051,1731,1058],{"class":1057},[1051,1733,1062],{"class":1061},[1051,1735,1736],{"class":1065}," addTemplate",[1051,1738,1069],{"class":1061},[1051,1740,1077],{"class":1065},[1051,1742,1080],{"class":1061},[1051,1744,1083],{"class":1057},[1051,1746,1087],{"class":1086},[1051,1748,1091],{"class":1090},[1051,1750,1094],{"class":1086},[1051,1752,1753],{"class":1053,"line":1097},[1051,1754,1101],{"emptyLinePlaceholder":1100},[1051,1756,1757,1759,1761,1763,1765],{"class":1053,"line":1104},[1051,1758,1107],{"class":1057},[1051,1760,1110],{"class":1057},[1051,1762,1077],{"class":1113},[1051,1764,1116],{"class":1065},[1051,1766,1119],{"class":1061},[1051,1768,1769,1771,1773,1775,1777,1779,1781],{"class":1053,"line":1122},[1051,1770,1220],{"class":1219},[1051,1772,1157],{"class":1061},[1051,1774,1225],{"class":1160},[1051,1776,1069],{"class":1061},[1051,1778,1230],{"class":1160},[1051,1780,1164],{"class":1061},[1051,1782,1139],{"class":1061},[1051,1784,1785],{"class":1053,"line":1129},[1051,1786,1787],{"class":1125},"    \u002F\u002F 该文件被添加到 Nuxt 内部的虚拟文件系统，可以从 '#build\u002Fmy-module-feature.mjs' 导入\n",[1051,1789,1790,1793,1795],{"class":1053,"line":1142},[1051,1791,1792],{"class":1113},"    addTemplate",[1051,1794,1116],{"class":1132},[1051,1796,1119],{"class":1061},[1051,1798,1799,1802,1804,1806,1809,1811],{"class":1053,"line":1173},[1051,1800,1801],{"class":1132},"      filename",[1051,1803,1136],{"class":1061},[1051,1805,1087],{"class":1086},[1051,1807,1808],{"class":1090},"my-module-feature.mjs",[1051,1810,1152],{"class":1086},[1051,1812,1813],{"class":1061},",\n",[1051,1815,1816,1819,1821,1823,1825,1827,1830,1832],{"class":1053,"line":1204},[1051,1817,1818],{"class":1113},"      getContents",[1051,1820,1136],{"class":1061},[1051,1822,1639],{"class":1061},[1051,1824,1168],{"class":1167},[1051,1826,1087],{"class":1086},[1051,1828,1829],{"class":1090},"export const myModuleFeature = () => \"hello world !\"",[1051,1831,1152],{"class":1086},[1051,1833,1813],{"class":1061},[1051,1835,1836,1838],{"class":1053,"line":1210},[1051,1837,1314],{"class":1061},[1051,1839,1201],{"class":1132},[1051,1841,1842],{"class":1053,"line":1216},[1051,1843,1213],{"class":1061},[1051,1845,1846,1848],{"class":1053,"line":1237},[1051,1847,1301],{"class":1061},[1051,1849,1201],{"class":1065},[1024,1851,1852,1853,1722],{},"对于服务端，你应该改用 ",[1038,1854,1855],{},"addServerTemplate",[1043,1857,1859],{"className":1364,"code":1858,"language":1366,"meta":354,"style":354},"import { addServerTemplate, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    \u002F\u002F 该文件被添加到 Nitro 的虚拟文件系统，可以在服务端代码中通过 'my-server-module.mjs' 导入\n    addServerTemplate({\n      filename: 'my-server-module.mjs',\n      getContents: () => 'export const myServerModule = () => \"hello world !\"',\n    })\n  },\n})\n",[1038,1860,1861,1884,1888,1900,1916,1921,1930,1945,1964,1970,1974],{"__ignoreMap":354},[1051,1862,1863,1865,1867,1870,1872,1874,1876,1878,1880,1882],{"class":1053,"line":1054},[1051,1864,1058],{"class":1057},[1051,1866,1062],{"class":1061},[1051,1868,1869],{"class":1065}," addServerTemplate",[1051,1871,1069],{"class":1061},[1051,1873,1077],{"class":1065},[1051,1875,1080],{"class":1061},[1051,1877,1083],{"class":1057},[1051,1879,1087],{"class":1086},[1051,1881,1091],{"class":1090},[1051,1883,1094],{"class":1086},[1051,1885,1886],{"class":1053,"line":1097},[1051,1887,1101],{"emptyLinePlaceholder":1100},[1051,1889,1890,1892,1894,1896,1898],{"class":1053,"line":1104},[1051,1891,1107],{"class":1057},[1051,1893,1110],{"class":1057},[1051,1895,1077],{"class":1113},[1051,1897,1116],{"class":1065},[1051,1899,1119],{"class":1061},[1051,1901,1902,1904,1906,1908,1910,1912,1914],{"class":1053,"line":1122},[1051,1903,1220],{"class":1219},[1051,1905,1157],{"class":1061},[1051,1907,1225],{"class":1160},[1051,1909,1069],{"class":1061},[1051,1911,1230],{"class":1160},[1051,1913,1164],{"class":1061},[1051,1915,1139],{"class":1061},[1051,1917,1918],{"class":1053,"line":1129},[1051,1919,1920],{"class":1125},"    \u002F\u002F 该文件被添加到 Nitro 的虚拟文件系统，可以在服务端代码中通过 'my-server-module.mjs' 导入\n",[1051,1922,1923,1926,1928],{"class":1053,"line":1142},[1051,1924,1925],{"class":1113},"    addServerTemplate",[1051,1927,1116],{"class":1132},[1051,1929,1119],{"class":1061},[1051,1931,1932,1934,1936,1938,1941,1943],{"class":1053,"line":1173},[1051,1933,1801],{"class":1132},[1051,1935,1136],{"class":1061},[1051,1937,1087],{"class":1086},[1051,1939,1940],{"class":1090},"my-server-module.mjs",[1051,1942,1152],{"class":1086},[1051,1944,1813],{"class":1061},[1051,1946,1947,1949,1951,1953,1955,1957,1960,1962],{"class":1053,"line":1204},[1051,1948,1818],{"class":1113},[1051,1950,1136],{"class":1061},[1051,1952,1639],{"class":1061},[1051,1954,1168],{"class":1167},[1051,1956,1087],{"class":1086},[1051,1958,1959],{"class":1090},"export const myServerModule = () => \"hello world !\"",[1051,1961,1152],{"class":1086},[1051,1963,1813],{"class":1061},[1051,1965,1966,1968],{"class":1053,"line":1210},[1051,1967,1314],{"class":1061},[1051,1969,1201],{"class":1132},[1051,1971,1972],{"class":1053,"line":1216},[1051,1973,1213],{"class":1061},[1051,1975,1976,1978],{"class":1053,"line":1237},[1051,1977,1301],{"class":1061},[1051,1979,1201],{"class":1065},[1028,1981,1982],{"id":1982},"更新虚拟文件",[1024,1984,1985,1986,1989],{},"如果你需要更新你的模板\u002F虚拟文件，你可以像这样利用 ",[1038,1987,1988],{},"updateTemplates"," 工具函数：",[1043,1991,1993],{"className":1364,"code":1992,"language":1366,"meta":354,"style":354},"nuxt.hook('builder:watch', (event, path) => {\n  if (path.includes('my-module-feature.config')) {\n    \u002F\u002F 这会重新加载你注册的模板\n    updateTemplates({ filter: t => t.filename === 'my-module-feature.mjs' })\n  }\n})\n",[1038,1994,1995,2030,2059,2064,2104,2109],{"__ignoreMap":354},[1051,1996,1997,1999,2001,2003,2005,2007,2010,2012,2014,2016,2019,2021,2024,2026,2028],{"class":1053,"line":1054},[1051,1998,1444],{"class":1065},[1051,2000,1179],{"class":1061},[1051,2002,1251],{"class":1113},[1051,2004,1116],{"class":1065},[1051,2006,1152],{"class":1086},[1051,2008,2009],{"class":1090},"builder:watch",[1051,2011,1152],{"class":1086},[1051,2013,1069],{"class":1061},[1051,2015,1157],{"class":1061},[1051,2017,2018],{"class":1160},"event",[1051,2020,1069],{"class":1061},[1051,2022,2023],{"class":1160}," path",[1051,2025,1164],{"class":1061},[1051,2027,1168],{"class":1167},[1051,2029,1139],{"class":1061},[1051,2031,2032,2035,2037,2040,2042,2045,2047,2049,2052,2054,2057],{"class":1053,"line":1097},[1051,2033,2034],{"class":1057},"  if",[1051,2036,1157],{"class":1132},[1051,2038,2039],{"class":1065},"path",[1051,2041,1179],{"class":1061},[1051,2043,2044],{"class":1113},"includes",[1051,2046,1116],{"class":1132},[1051,2048,1152],{"class":1086},[1051,2050,2051],{"class":1090},"my-module-feature.config",[1051,2053,1152],{"class":1086},[1051,2055,2056],{"class":1132},")) ",[1051,2058,1119],{"class":1061},[1051,2060,2061],{"class":1053,"line":1104},[1051,2062,2063],{"class":1125},"    \u002F\u002F 这会重新加载你注册的模板\n",[1051,2065,2066,2069,2071,2074,2077,2079,2082,2084,2086,2088,2091,2094,2096,2098,2100,2102],{"class":1053,"line":1122},[1051,2067,2068],{"class":1113},"    updateTemplates",[1051,2070,1116],{"class":1132},[1051,2072,2073],{"class":1061},"{",[1051,2075,2076],{"class":1113}," filter",[1051,2078,1136],{"class":1061},[1051,2080,2081],{"class":1160}," t",[1051,2083,1168],{"class":1167},[1051,2085,2081],{"class":1065},[1051,2087,1179],{"class":1061},[1051,2089,2090],{"class":1065},"filename",[1051,2092,2093],{"class":1547}," ===",[1051,2095,1087],{"class":1086},[1051,2097,1808],{"class":1090},[1051,2099,1152],{"class":1086},[1051,2101,1080],{"class":1061},[1051,2103,1201],{"class":1132},[1051,2105,2106],{"class":1053,"line":1129},[1051,2107,2108],{"class":1061},"  }\n",[1051,2110,2111,2113],{"class":1053,"line":1142},[1051,2112,1301],{"class":1061},[1051,2114,1201],{"class":1065},[1028,2116,2117],{"id":2117},"添加类型声明",[1024,2119,2120,2121,2124,2125,2128],{},"你可能还想向用户的项目添加一个类型声明（例如，增强某个 Nuxt 接口，或提供你自己的全局类型）。为此，Nuxt 提供了 ",[1038,2122,2123],{},"addTypeTemplate"," 工具函数，它既会把模板写入磁盘，也会在生成的 ",[1038,2126,2127],{},"nuxt.d.ts"," 文件中添加对它的引用。",[1024,2130,2131,2132,2134],{},"如果你的模块应该增强由 Nuxt 处理的类型，你可以使用 ",[1038,2133,2123],{}," 来执行此操作：",[1043,2136,2138],{"className":1045,"code":2137,"language":1047,"meta":354,"style":354},"import { addTemplate, addTypeTemplate, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    addTypeTemplate({\n      filename: 'types\u002Fmy-module.d.ts',\n      getContents: () => `\u002F\u002F Generated by my-module\n        interface MyModuleNitroRules {\n          myModule?: { foo: 'bar' }\n        }\n        declare module 'nitro\u002Ftypes' {\n          interface NitroRouteRules extends MyModuleNitroRules {}\n          interface NitroRouteConfig extends MyModuleNitroRules {}\n        }\n        export {}`,\n    })\n  },\n})\n",[1038,2139,2140,2167,2171,2183,2199,2208,2223,2239,2244,2249,2254,2259,2264,2269,2273,2282,2288,2293],{"__ignoreMap":354},[1051,2141,2142,2144,2146,2148,2150,2153,2155,2157,2159,2161,2163,2165],{"class":1053,"line":1054},[1051,2143,1058],{"class":1057},[1051,2145,1062],{"class":1061},[1051,2147,1736],{"class":1065},[1051,2149,1069],{"class":1061},[1051,2151,2152],{"class":1065}," addTypeTemplate",[1051,2154,1069],{"class":1061},[1051,2156,1077],{"class":1065},[1051,2158,1080],{"class":1061},[1051,2160,1083],{"class":1057},[1051,2162,1087],{"class":1086},[1051,2164,1091],{"class":1090},[1051,2166,1094],{"class":1086},[1051,2168,2169],{"class":1053,"line":1097},[1051,2170,1101],{"emptyLinePlaceholder":1100},[1051,2172,2173,2175,2177,2179,2181],{"class":1053,"line":1104},[1051,2174,1107],{"class":1057},[1051,2176,1110],{"class":1057},[1051,2178,1077],{"class":1113},[1051,2180,1116],{"class":1065},[1051,2182,1119],{"class":1061},[1051,2184,2185,2187,2189,2191,2193,2195,2197],{"class":1053,"line":1122},[1051,2186,1220],{"class":1219},[1051,2188,1157],{"class":1061},[1051,2190,1225],{"class":1160},[1051,2192,1069],{"class":1061},[1051,2194,1230],{"class":1160},[1051,2196,1164],{"class":1061},[1051,2198,1139],{"class":1061},[1051,2200,2201,2204,2206],{"class":1053,"line":1129},[1051,2202,2203],{"class":1113},"    addTypeTemplate",[1051,2205,1116],{"class":1132},[1051,2207,1119],{"class":1061},[1051,2209,2210,2212,2214,2216,2219,2221],{"class":1053,"line":1142},[1051,2211,1801],{"class":1132},[1051,2213,1136],{"class":1061},[1051,2215,1087],{"class":1086},[1051,2217,2218],{"class":1090},"types\u002Fmy-module.d.ts",[1051,2220,1152],{"class":1086},[1051,2222,1813],{"class":1061},[1051,2224,2225,2227,2229,2231,2233,2236],{"class":1053,"line":1173},[1051,2226,1818],{"class":1113},[1051,2228,1136],{"class":1061},[1051,2230,1639],{"class":1061},[1051,2232,1168],{"class":1167},[1051,2234,2235],{"class":1086}," `",[1051,2237,2238],{"class":1090},"\u002F\u002F Generated by my-module\n",[1051,2240,2241],{"class":1053,"line":1204},[1051,2242,2243],{"class":1090},"        interface MyModuleNitroRules {\n",[1051,2245,2246],{"class":1053,"line":1210},[1051,2247,2248],{"class":1090},"          myModule?: { foo: 'bar' }\n",[1051,2250,2251],{"class":1053,"line":1216},[1051,2252,2253],{"class":1090},"        }\n",[1051,2255,2256],{"class":1053,"line":1237},[1051,2257,2258],{"class":1090},"        declare module 'nitro\u002Ftypes' {\n",[1051,2260,2261],{"class":1053,"line":1243},[1051,2262,2263],{"class":1090},"          interface NitroRouteRules extends MyModuleNitroRules {}\n",[1051,2265,2266],{"class":1053,"line":1275},[1051,2267,2268],{"class":1090},"          interface NitroRouteConfig extends MyModuleNitroRules {}\n",[1051,2270,2271],{"class":1053,"line":1311},[1051,2272,2253],{"class":1090},[1051,2274,2275,2278,2280],{"class":1053,"line":1319},[1051,2276,2277],{"class":1090},"        export {}",[1051,2279,1187],{"class":1086},[1051,2281,1813],{"class":1061},[1051,2283,2284,2286],{"class":1053,"line":1324},[1051,2285,1314],{"class":1061},[1051,2287,1201],{"class":1132},[1051,2289,2291],{"class":1053,"line":2290},17,[1051,2292,1213],{"class":1061},[1051,2294,2296,2298],{"class":1053,"line":2295},18,[1051,2297,1301],{"class":1061},[1051,2299,1201],{"class":1065},[1024,2301,2302,2303,2306],{},"如果你需要更精细的控制，可以使用 ",[1038,2304,2305],{},"prepare:types"," 钩子注册一个回调，它将注入你的类型。",[1043,2308,2310],{"className":1364,"code":2309,"language":1366,"meta":354,"style":354},"const template = addTemplate({ \u002F* template options *\u002F })\nnuxt.hook('prepare:types', ({ references }) => {\n  references.push({ path: template.dst })\n})\n",[1038,2311,2312,2335,2365,2394],{"__ignoreMap":354},[1051,2313,2314,2317,2320,2322,2324,2326,2328,2331,2333],{"class":1053,"line":1054},[1051,2315,2316],{"class":1167},"const",[1051,2318,2319],{"class":1297}," template",[1051,2321,1654],{"class":1547},[1051,2323,1736],{"class":1113},[1051,2325,1116],{"class":1065},[1051,2327,2073],{"class":1061},[1051,2329,2330],{"class":1125}," \u002F* template options *\u002F",[1051,2332,1080],{"class":1061},[1051,2334,1201],{"class":1065},[1051,2336,2337,2339,2341,2343,2345,2347,2349,2351,2353,2356,2359,2361,2363],{"class":1053,"line":1097},[1051,2338,1444],{"class":1065},[1051,2340,1179],{"class":1061},[1051,2342,1251],{"class":1113},[1051,2344,1116],{"class":1065},[1051,2346,1152],{"class":1086},[1051,2348,2305],{"class":1090},[1051,2350,1152],{"class":1086},[1051,2352,1069],{"class":1061},[1051,2354,2355],{"class":1061}," ({",[1051,2357,2358],{"class":1160}," references",[1051,2360,1569],{"class":1061},[1051,2362,1168],{"class":1167},[1051,2364,1139],{"class":1061},[1051,2366,2367,2370,2372,2375,2377,2379,2381,2383,2385,2387,2390,2392],{"class":1053,"line":1104},[1051,2368,2369],{"class":1065},"  references",[1051,2371,1179],{"class":1061},[1051,2373,2374],{"class":1113},"push",[1051,2376,1116],{"class":1132},[1051,2378,2073],{"class":1061},[1051,2380,2023],{"class":1132},[1051,2382,1136],{"class":1061},[1051,2384,2319],{"class":1065},[1051,2386,1179],{"class":1061},[1051,2388,2389],{"class":1065},"dst",[1051,2391,1080],{"class":1061},[1051,2393,1201],{"class":1132},[1051,2395,2396,2398],{"class":1053,"line":1122},[1051,2397,1301],{"class":1061},[1051,2399,1201],{"class":1065},[1028,2401,2403],{"id":2402},"扩展-typescript-配置","扩展 TypeScript 配置",[1024,2405,2406],{},"有多种方式可以从你的模块扩展用户的 TypeScript 配置。",[1024,2408,2409],{},"最简单的方式是直接修改 Nuxt 配置，像这样：",[1043,2411,2413],{"className":1364,"code":2412,"language":1366,"meta":354,"style":354},"\u002F\u002F 扩展 tsconfig.app.json\nnuxt.options.typescript.tsConfig.include ??= []\nnuxt.options.typescript.tsConfig.include.push(resolve('.\u002Faugments.d.ts'))\n\n\u002F\u002F 扩展 tsconfig.shared.json\nnuxt.options.typescript.sharedTsConfig.include ??= []\nnuxt.options.typescript.sharedTsConfig.include.push(resolve('.\u002Faugments.d.ts'))\n\n\u002F\u002F 扩展 tsconfig.node.json\nnuxt.options.typescript.nodeTsConfig.include ??= []\nnuxt.options.typescript.nodeTsConfig.include.push(resolve('.\u002Faugments.d.ts'))\n\n\u002F\u002F 扩展 tsconfig.server.json\nnuxt.options.typescript.serverTsConfig.include ??= []\nnuxt.options.typescript.serverTsConfig.include.push(resolve('.\u002Faugments.d.ts'))\n",[1038,2414,2415,2420,2449,2491,2495,2500,2525,2563,2567,2572,2597,2635,2639,2644,2669],{"__ignoreMap":354},[1051,2416,2417],{"class":1053,"line":1054},[1051,2418,2419],{"class":1125},"\u002F\u002F 扩展 tsconfig.app.json\n",[1051,2421,2422,2424,2426,2428,2430,2433,2435,2438,2440,2443,2446],{"class":1053,"line":1097},[1051,2423,1444],{"class":1065},[1051,2425,1179],{"class":1061},[1051,2427,1225],{"class":1065},[1051,2429,1179],{"class":1061},[1051,2431,2432],{"class":1065},"typescript",[1051,2434,1179],{"class":1061},[1051,2436,2437],{"class":1065},"tsConfig",[1051,2439,1179],{"class":1061},[1051,2441,2442],{"class":1065},"include ",[1051,2444,2445],{"class":1547},"??=",[1051,2447,2448],{"class":1065}," []\n",[1051,2450,2451,2453,2455,2457,2459,2461,2463,2465,2467,2470,2472,2474,2476,2479,2481,2483,2486,2488],{"class":1053,"line":1104},[1051,2452,1444],{"class":1065},[1051,2454,1179],{"class":1061},[1051,2456,1225],{"class":1065},[1051,2458,1179],{"class":1061},[1051,2460,2432],{"class":1065},[1051,2462,1179],{"class":1061},[1051,2464,2437],{"class":1065},[1051,2466,1179],{"class":1061},[1051,2468,2469],{"class":1065},"include",[1051,2471,1179],{"class":1061},[1051,2473,2374],{"class":1113},[1051,2475,1116],{"class":1065},[1051,2477,2478],{"class":1113},"resolve",[1051,2480,1116],{"class":1065},[1051,2482,1152],{"class":1086},[1051,2484,2485],{"class":1090},".\u002Faugments.d.ts",[1051,2487,1152],{"class":1086},[1051,2489,2490],{"class":1065},"))\n",[1051,2492,2493],{"class":1053,"line":1122},[1051,2494,1101],{"emptyLinePlaceholder":1100},[1051,2496,2497],{"class":1053,"line":1129},[1051,2498,2499],{"class":1125},"\u002F\u002F 扩展 tsconfig.shared.json\n",[1051,2501,2502,2504,2506,2508,2510,2512,2514,2517,2519,2521,2523],{"class":1053,"line":1142},[1051,2503,1444],{"class":1065},[1051,2505,1179],{"class":1061},[1051,2507,1225],{"class":1065},[1051,2509,1179],{"class":1061},[1051,2511,2432],{"class":1065},[1051,2513,1179],{"class":1061},[1051,2515,2516],{"class":1065},"sharedTsConfig",[1051,2518,1179],{"class":1061},[1051,2520,2442],{"class":1065},[1051,2522,2445],{"class":1547},[1051,2524,2448],{"class":1065},[1051,2526,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561],{"class":1053,"line":1173},[1051,2528,1444],{"class":1065},[1051,2530,1179],{"class":1061},[1051,2532,1225],{"class":1065},[1051,2534,1179],{"class":1061},[1051,2536,2432],{"class":1065},[1051,2538,1179],{"class":1061},[1051,2540,2516],{"class":1065},[1051,2542,1179],{"class":1061},[1051,2544,2469],{"class":1065},[1051,2546,1179],{"class":1061},[1051,2548,2374],{"class":1113},[1051,2550,1116],{"class":1065},[1051,2552,2478],{"class":1113},[1051,2554,1116],{"class":1065},[1051,2556,1152],{"class":1086},[1051,2558,2485],{"class":1090},[1051,2560,1152],{"class":1086},[1051,2562,2490],{"class":1065},[1051,2564,2565],{"class":1053,"line":1204},[1051,2566,1101],{"emptyLinePlaceholder":1100},[1051,2568,2569],{"class":1053,"line":1210},[1051,2570,2571],{"class":1125},"\u002F\u002F 扩展 tsconfig.node.json\n",[1051,2573,2574,2576,2578,2580,2582,2584,2586,2589,2591,2593,2595],{"class":1053,"line":1216},[1051,2575,1444],{"class":1065},[1051,2577,1179],{"class":1061},[1051,2579,1225],{"class":1065},[1051,2581,1179],{"class":1061},[1051,2583,2432],{"class":1065},[1051,2585,1179],{"class":1061},[1051,2587,2588],{"class":1065},"nodeTsConfig",[1051,2590,1179],{"class":1061},[1051,2592,2442],{"class":1065},[1051,2594,2445],{"class":1547},[1051,2596,2448],{"class":1065},[1051,2598,2599,2601,2603,2605,2607,2609,2611,2613,2615,2617,2619,2621,2623,2625,2627,2629,2631,2633],{"class":1053,"line":1237},[1051,2600,1444],{"class":1065},[1051,2602,1179],{"class":1061},[1051,2604,1225],{"class":1065},[1051,2606,1179],{"class":1061},[1051,2608,2432],{"class":1065},[1051,2610,1179],{"class":1061},[1051,2612,2588],{"class":1065},[1051,2614,1179],{"class":1061},[1051,2616,2469],{"class":1065},[1051,2618,1179],{"class":1061},[1051,2620,2374],{"class":1113},[1051,2622,1116],{"class":1065},[1051,2624,2478],{"class":1113},[1051,2626,1116],{"class":1065},[1051,2628,1152],{"class":1086},[1051,2630,2485],{"class":1090},[1051,2632,1152],{"class":1086},[1051,2634,2490],{"class":1065},[1051,2636,2637],{"class":1053,"line":1243},[1051,2638,1101],{"emptyLinePlaceholder":1100},[1051,2640,2641],{"class":1053,"line":1275},[1051,2642,2643],{"class":1125},"\u002F\u002F 扩展 tsconfig.server.json\n",[1051,2645,2646,2648,2650,2652,2654,2656,2658,2661,2663,2665,2667],{"class":1053,"line":1311},[1051,2647,1444],{"class":1065},[1051,2649,1179],{"class":1061},[1051,2651,1225],{"class":1065},[1051,2653,1179],{"class":1061},[1051,2655,2432],{"class":1065},[1051,2657,1179],{"class":1061},[1051,2659,2660],{"class":1065},"serverTsConfig",[1051,2662,1179],{"class":1061},[1051,2664,2442],{"class":1065},[1051,2666,2445],{"class":1547},[1051,2668,2448],{"class":1065},[1051,2670,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703,2705],{"class":1053,"line":1319},[1051,2672,1444],{"class":1065},[1051,2674,1179],{"class":1061},[1051,2676,1225],{"class":1065},[1051,2678,1179],{"class":1061},[1051,2680,2432],{"class":1065},[1051,2682,1179],{"class":1061},[1051,2684,2660],{"class":1065},[1051,2686,1179],{"class":1061},[1051,2688,2469],{"class":1065},[1051,2690,1179],{"class":1061},[1051,2692,2374],{"class":1113},[1051,2694,1116],{"class":1065},[1051,2696,2478],{"class":1113},[1051,2698,1116],{"class":1065},[1051,2700,1152],{"class":1086},[1051,2702,2485],{"class":1090},[1051,2704,1152],{"class":1086},[1051,2706,2490],{"class":1065},[1024,2708,2709,2710,2712,2713,2716],{},"或者，你可以使用 ",[1038,2711,2305],{}," 和 ",[1038,2714,2715],{},"nitro:prepare:types"," 钩子来为特定的类型上下文扩展 TypeScript 引用，或修改类似于上面示例的 TypeScript 配置。",[1043,2718,2720],{"className":1364,"code":2719,"language":1366,"meta":354,"style":354},"nuxt.hook('prepare:types', ({ references, sharedReferences, nodeReferences }) => {\n  \u002F\u002F 扩展 app 上下文\n  references.push({ path: resolve('.\u002Faugments.d.ts') })\n  \u002F\u002F 扩展 shared 上下文\n  sharedReferences.push({ path: resolve('.\u002Faugments.d.ts') })\n  \u002F\u002F 扩展 node 上下文\n  nodeReferences.push({ path: resolve('.\u002Faugments.d.ts') })\n})\n\nnuxt.hook('nitro:prepare:types', ({ references }) => {\n  \u002F\u002F 扩展 server 上下文\n  references.push({ path: resolve('.\u002Faugments.d.ts') })\n})\n",[1038,2721,2722,2760,2765,2799,2804,2837,2842,2875,2881,2885,2913,2918,2950],{"__ignoreMap":354},[1051,2723,2724,2726,2728,2730,2732,2734,2736,2738,2740,2742,2744,2746,2749,2751,2754,2756,2758],{"class":1053,"line":1054},[1051,2725,1444],{"class":1065},[1051,2727,1179],{"class":1061},[1051,2729,1251],{"class":1113},[1051,2731,1116],{"class":1065},[1051,2733,1152],{"class":1086},[1051,2735,2305],{"class":1090},[1051,2737,1152],{"class":1086},[1051,2739,1069],{"class":1061},[1051,2741,2355],{"class":1061},[1051,2743,2358],{"class":1160},[1051,2745,1069],{"class":1061},[1051,2747,2748],{"class":1160}," sharedReferences",[1051,2750,1069],{"class":1061},[1051,2752,2753],{"class":1160}," nodeReferences",[1051,2755,1569],{"class":1061},[1051,2757,1168],{"class":1167},[1051,2759,1139],{"class":1061},[1051,2761,2762],{"class":1053,"line":1097},[1051,2763,2764],{"class":1125},"  \u002F\u002F 扩展 app 上下文\n",[1051,2766,2767,2769,2771,2773,2775,2777,2779,2781,2784,2786,2788,2790,2792,2795,2797],{"class":1053,"line":1104},[1051,2768,2369],{"class":1065},[1051,2770,1179],{"class":1061},[1051,2772,2374],{"class":1113},[1051,2774,1116],{"class":1132},[1051,2776,2073],{"class":1061},[1051,2778,2023],{"class":1132},[1051,2780,1136],{"class":1061},[1051,2782,2783],{"class":1113}," resolve",[1051,2785,1116],{"class":1132},[1051,2787,1152],{"class":1086},[1051,2789,2485],{"class":1090},[1051,2791,1152],{"class":1086},[1051,2793,2794],{"class":1132},") ",[1051,2796,1301],{"class":1061},[1051,2798,1201],{"class":1132},[1051,2800,2801],{"class":1053,"line":1122},[1051,2802,2803],{"class":1125},"  \u002F\u002F 扩展 shared 上下文\n",[1051,2805,2806,2809,2811,2813,2815,2817,2819,2821,2823,2825,2827,2829,2831,2833,2835],{"class":1053,"line":1129},[1051,2807,2808],{"class":1065},"  sharedReferences",[1051,2810,1179],{"class":1061},[1051,2812,2374],{"class":1113},[1051,2814,1116],{"class":1132},[1051,2816,2073],{"class":1061},[1051,2818,2023],{"class":1132},[1051,2820,1136],{"class":1061},[1051,2822,2783],{"class":1113},[1051,2824,1116],{"class":1132},[1051,2826,1152],{"class":1086},[1051,2828,2485],{"class":1090},[1051,2830,1152],{"class":1086},[1051,2832,2794],{"class":1132},[1051,2834,1301],{"class":1061},[1051,2836,1201],{"class":1132},[1051,2838,2839],{"class":1053,"line":1142},[1051,2840,2841],{"class":1125},"  \u002F\u002F 扩展 node 上下文\n",[1051,2843,2844,2847,2849,2851,2853,2855,2857,2859,2861,2863,2865,2867,2869,2871,2873],{"class":1053,"line":1173},[1051,2845,2846],{"class":1065},"  nodeReferences",[1051,2848,1179],{"class":1061},[1051,2850,2374],{"class":1113},[1051,2852,1116],{"class":1132},[1051,2854,2073],{"class":1061},[1051,2856,2023],{"class":1132},[1051,2858,1136],{"class":1061},[1051,2860,2783],{"class":1113},[1051,2862,1116],{"class":1132},[1051,2864,1152],{"class":1086},[1051,2866,2485],{"class":1090},[1051,2868,1152],{"class":1086},[1051,2870,2794],{"class":1132},[1051,2872,1301],{"class":1061},[1051,2874,1201],{"class":1132},[1051,2876,2877,2879],{"class":1053,"line":1204},[1051,2878,1301],{"class":1061},[1051,2880,1201],{"class":1065},[1051,2882,2883],{"class":1053,"line":1210},[1051,2884,1101],{"emptyLinePlaceholder":1100},[1051,2886,2887,2889,2891,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911],{"class":1053,"line":1216},[1051,2888,1444],{"class":1065},[1051,2890,1179],{"class":1061},[1051,2892,1251],{"class":1113},[1051,2894,1116],{"class":1065},[1051,2896,1152],{"class":1086},[1051,2898,2715],{"class":1090},[1051,2900,1152],{"class":1086},[1051,2902,1069],{"class":1061},[1051,2904,2355],{"class":1061},[1051,2906,2358],{"class":1160},[1051,2908,1569],{"class":1061},[1051,2910,1168],{"class":1167},[1051,2912,1139],{"class":1061},[1051,2914,2915],{"class":1053,"line":1237},[1051,2916,2917],{"class":1125},"  \u002F\u002F 扩展 server 上下文\n",[1051,2919,2920,2922,2924,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944,2946,2948],{"class":1053,"line":1243},[1051,2921,2369],{"class":1065},[1051,2923,1179],{"class":1061},[1051,2925,2374],{"class":1113},[1051,2927,1116],{"class":1132},[1051,2929,2073],{"class":1061},[1051,2931,2023],{"class":1132},[1051,2933,1136],{"class":1061},[1051,2935,2783],{"class":1113},[1051,2937,1116],{"class":1132},[1051,2939,1152],{"class":1086},[1051,2941,2485],{"class":1090},[1051,2943,1152],{"class":1086},[1051,2945,2794],{"class":1132},[1051,2947,1301],{"class":1061},[1051,2949,1201],{"class":1132},[1051,2951,2952,2954],{"class":1053,"line":1275},[1051,2953,1301],{"class":1061},[1051,2955,1201],{"class":1065},[1342,2957,2958],{},[1024,2959,2960,2961,2974],{},"TypeScript 引用会将文件添加到类型上下文中，",[1034,2962,2966,2967,2969,2970,2973],{"href":2963,"rel":2964},"https:\u002F\u002Fwww.typescriptlang.org\u002Ftsconfig\u002F#exclude",[2965],"nofollow","不受 ",[1038,2968,182],{}," 中 ",[1038,2971,2972],{},"exclude"," 选项的影响","。",[1028,2976,2977],{"id":2977},"增强类型",[1024,2979,2980,2981,2984],{},"Nuxt 会自动将你的模块目录包含在适当的类型上下文中。要从你的模块增强类型，你只需根据所增强的类型上下文将类型声明文件放在适当的目录中。或者，你可以",[1034,2982,2403],{"href":2983},"#extend-typescript-config"," 来从任意位置增强。",[2986,2987,2988,2999,3005],"ul",{},[2989,2990,2991,2994,2995,2998],"li",{},[1038,2992,2993],{},"my-module\u002Fruntime\u002F"," - app 类型上下文（除了 ",[1038,2996,2997],{},"runtime\u002Fserver"," 目录）",[2989,3000,3001,3004],{},[1038,3002,3003],{},"my-module\u002Fruntime\u002Fserver\u002F"," - server 类型上下文",[2989,3006,3007,3010,3011,2712,3014,2998],{},[1038,3008,3009],{},"my-module\u002F"," - node 类型上下文（除了 ",[1038,3012,3013],{},"runtime\u002F",[1038,3015,2997],{},[1043,3017,3022],{"className":3018,"code":3019,"filename":3020,"language":3021,"meta":354,"style":354},"language-bash shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","-| my-module\u002F   # node 类型上下文\n---| runtime\u002F   # app 类型上下文\n------| augments.app.d.ts\n------| server\u002F # server 类型上下文\n---------| augments.server.d.ts\n---| module.ts\n---| augments.node.d.ts\n","Directory Structure","bash",[1038,3023,3024,3038,3051,3061,3073,3083,3092],{"__ignoreMap":354},[1051,3025,3026,3029,3032,3035],{"class":1053,"line":1054},[1051,3027,3028],{"class":1531},"-",[1051,3030,3031],{"class":1547},"|",[1051,3033,3034],{"class":1531}," my-module\u002F",[1051,3036,3037],{"class":1125},"   # node 类型上下文\n",[1051,3039,3040,3043,3045,3048],{"class":1053,"line":1097},[1051,3041,3042],{"class":1531},"---",[1051,3044,3031],{"class":1547},[1051,3046,3047],{"class":1531}," runtime\u002F",[1051,3049,3050],{"class":1125},"   # app 类型上下文\n",[1051,3052,3053,3056,3058],{"class":1053,"line":1104},[1051,3054,3055],{"class":1531},"------",[1051,3057,3031],{"class":1547},[1051,3059,3060],{"class":1531}," augments.app.d.ts\n",[1051,3062,3063,3065,3067,3070],{"class":1053,"line":1122},[1051,3064,3055],{"class":1531},[1051,3066,3031],{"class":1547},[1051,3068,3069],{"class":1531}," server\u002F",[1051,3071,3072],{"class":1125}," # server 类型上下文\n",[1051,3074,3075,3078,3080],{"class":1053,"line":1129},[1051,3076,3077],{"class":1531},"---------",[1051,3079,3031],{"class":1547},[1051,3081,3082],{"class":1531}," augments.server.d.ts\n",[1051,3084,3085,3087,3089],{"class":1053,"line":1142},[1051,3086,3042],{"class":1531},[1051,3088,3031],{"class":1547},[1051,3090,3091],{"class":1531}," module.ts\n",[1051,3093,3094,3096,3098],{"class":1053,"line":1173},[1051,3095,3042],{"class":1531},[1051,3097,3031],{"class":1547},[1051,3099,3100],{"class":1531}," augments.node.d.ts\n",[1473,3102,3103],{"id":3103},"已知限制",[3105,3106,3108],"h4",{"id":3107},"在-app-上下文中对服务端路由进行类型检查","在 App 上下文中对服务端路由进行类型检查",[1024,3110,3111,3112,3115,3116,3119],{},"除了 ",[1038,3113,3114],{},"tsconfig.server.json"," 之外，服务端路由也使用 ",[1038,3117,3118],{},"tsconfig.app.json"," 进行类型检查。",[1024,3121,3122,3123,2712,3127,3131],{},"这是必需的，因为 Nuxt 会推断你的服务端端点的返回类型，以在 ",[1034,3124,3125],{"href":552},[1038,3126,553],{},[1034,3128,3129],{"href":452},[1038,3130,453],{}," 中提供响应类型。",[3133,3134,3135],"warning",{},[1024,3136,3137,3138,3141,3142,3147,3148,3150],{},"在服务端路由文件中使用",[1347,3139,3140],{},"仅服务端类型","时，这可能会导致问题。例如，如果一个模块使用 ",[1034,3143,3145],{"href":3144},"\u002Fdocs\u002Fapi\u002Fkit\u002Ftemplates#addservertemplate",[1038,3146,1855],{}," 创建一个仅服务端的虚拟文件，并且你在 ",[1038,3149,3114],{}," 中为它声明了类型，那么这些类型声明将只在 server 上下文中可用。当 app 上下文对你的服务端路由进行类型检查时，它无法识别这些仅服务端的类型，并会报告错误。遗憾的是，要解决这个问题，你还需要在 app 上下文中声明这类类型。",[3152,3153,3154],"style",{},"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 .sF54B, html code.shiki .sF54B{--shiki-light:#39ADB5;--shiki-default:#E1E4E8;--shiki-dark:#89DDFF}html pre.shiki code .smVNa, html code.shiki .smVNa{--shiki-light:#90A4AE;--shiki-default:#E1E4E8;--shiki-dark:#BABED8}html pre.shiki code .s0jeK, html code.shiki .s0jeK{--shiki-light:#39ADB5;--shiki-default:#9ECBFF;--shiki-dark:#89DDFF}html pre.shiki code .s-Aze, html code.shiki .s-Aze{--shiki-light:#91B859;--shiki-default:#9ECBFF;--shiki-dark:#C3E88D}html pre.shiki code .srJn9, html code.shiki .srJn9{--shiki-light:#6182B8;--shiki-default:#B392F0;--shiki-dark:#82AAFF}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 .sOtFm, html code.shiki .sOtFm{--shiki-light:#E53935;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .sSD0A, html code.shiki .sSD0A{--shiki-light:#E53935;--shiki-default:#9ECBFF;--shiki-dark:#F07178}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 .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 .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 .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 .sP6_D, html code.shiki .sP6_D{--shiki-light:#E53935;--shiki-default:#FFAB70;--shiki-dark:#F07178}html pre.shiki code .seQRr, html code.shiki .seQRr{--shiki-light:#E2931D;--shiki-default:#79B8FF;--shiki-dark:#FFCB6B}",{"title":354,"searchDepth":1104,"depth":1104,"links":3156},[3157,3160,3161,3162,3163,3164],{"id":1030,"depth":1097,"text":1030,"children":3158},[3159],{"id":1475,"depth":1104,"text":1475},{"id":1715,"depth":1097,"text":1715},{"id":1982,"depth":1097,"text":1982},{"id":2117,"depth":1097,"text":2117},{"id":2402,"depth":1097,"text":2403},{"id":2977,"depth":1097,"text":2977,"children":3165},[3166],{"id":3103,"depth":1104,"text":3103,"children":3167},[3168],{"id":3107,"depth":1122,"text":3108},"md",{},null,{"title":270,"description":271},"docs\u002F3.guide\u002F4.modules\u002F5.recipes-advanced","2XXDqWh-gXtltk6sBn7GTgA4RnyJpXrrWcxq-N3oVL0",1785179848719]