[{"data":1,"prerenderedAt":4089},["ShallowReactive",2],{"docs-all-flat":3,"docs-\u002Fdocs\u002Fguide\u002Fmodules\u002Frecipes-basics":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":262,"body":1020,"description":263,"extension":4083,"meta":4084,"navigation":4085,"path":261,"seo":4086,"stem":4087,"__hash__":4088},"docs\u002Fdocs\u002F3.guide\u002F4.modules\u002F3.recipes-basics.md",{"type":1021,"value":1022,"toc":4070},"minimark",[1023,1027,1032,1035,1199,1210,1219,1222,1232,1394,1403,1406,1459,1465,4066],[1024,1025,1026],"p",{},"以下是模块作者常用的一些模式。",[1028,1029,1031],"h2",{"id":1030},"修改-nuxt-配置","修改 Nuxt 配置",[1024,1033,1034],{},"Nuxt 配置可以被模块读取和修改。下面是一个模块启用某个实验性特性的示例。",[1036,1037,1041],"pre",{"className":1038,"code":1039,"language":1040,"meta":354,"style":354},"language-js 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    \u002F\u002F 如果 `experimental` 对象尚不存在，我们就创建它\n    nuxt.options.experimental ||= {}\n    nuxt.options.experimental.componentIslands = true\n  },\n})\n","js",[1042,1043,1044,1078,1085,1103,1129,1136,1159,1184,1190],"code",{"__ignoreMap":354},[1045,1046,1049,1053,1057,1061,1064,1067,1071,1075],"span",{"class":1047,"line":1048},"line",1,[1045,1050,1052],{"class":1051},"szyBz","import",[1045,1054,1056],{"class":1055},"sF54B"," {",[1045,1058,1060],{"class":1059},"smVNa"," defineNuxtModule",[1045,1062,1063],{"class":1055}," }",[1045,1065,1066],{"class":1051}," from",[1045,1068,1070],{"class":1069},"s0jeK"," '",[1045,1072,1074],{"class":1073},"s-Aze","@nuxt\u002Fkit",[1045,1076,1077],{"class":1069},"'\n",[1045,1079,1081],{"class":1047,"line":1080},2,[1045,1082,1084],{"emptyLinePlaceholder":1083},true,"\n",[1045,1086,1088,1091,1094,1097,1100],{"class":1047,"line":1087},3,[1045,1089,1090],{"class":1051},"export",[1045,1092,1093],{"class":1051}," default",[1045,1095,1060],{"class":1096},"srJn9",[1045,1098,1099],{"class":1059},"(",[1045,1101,1102],{"class":1055},"{\n",[1045,1104,1106,1110,1113,1117,1120,1123,1126],{"class":1047,"line":1105},4,[1045,1107,1109],{"class":1108},"syA7L","  setup",[1045,1111,1112],{"class":1055}," (",[1045,1114,1116],{"class":1115},"ssIVr","options",[1045,1118,1119],{"class":1055},",",[1045,1121,1122],{"class":1115}," nuxt",[1045,1124,1125],{"class":1055},")",[1045,1127,1128],{"class":1055}," {\n",[1045,1130,1132],{"class":1047,"line":1131},5,[1045,1133,1135],{"class":1134},"sZqJ9","    \u002F\u002F 如果 `experimental` 对象尚不存在，我们就创建它\n",[1045,1137,1139,1142,1145,1147,1149,1152,1156],{"class":1047,"line":1138},6,[1045,1140,1141],{"class":1059},"    nuxt",[1045,1143,1144],{"class":1055},".",[1045,1146,1116],{"class":1059},[1045,1148,1144],{"class":1055},[1045,1150,1151],{"class":1059},"experimental",[1045,1153,1155],{"class":1154},"sXPRQ"," ||=",[1045,1157,1158],{"class":1055}," {}\n",[1045,1160,1162,1164,1166,1168,1170,1172,1174,1177,1180],{"class":1047,"line":1161},7,[1045,1163,1141],{"class":1059},[1045,1165,1144],{"class":1055},[1045,1167,1116],{"class":1059},[1045,1169,1144],{"class":1055},[1045,1171,1151],{"class":1059},[1045,1173,1144],{"class":1055},[1045,1175,1176],{"class":1059},"componentIslands",[1045,1178,1179],{"class":1154}," =",[1045,1181,1183],{"class":1182},"si1Qm"," true\n",[1045,1185,1187],{"class":1047,"line":1186},8,[1045,1188,1189],{"class":1055},"  },\n",[1045,1191,1193,1196],{"class":1047,"line":1192},9,[1045,1194,1195],{"class":1055},"}",[1045,1197,1198],{"class":1059},")\n",[1024,1200,1201,1202,1209],{},"当你需要处理更复杂的配置修改时，你应该考虑使用 ",[1203,1204,1208],"a",{"href":1205,"rel":1206},"https:\u002F\u002Fgithub.com\u002Funjs\u002Fdefu",[1207],"nofollow","defu","。",[1211,1212,1216],"tip",{"icon":1213,"target":1214,"to":1215},"i-lucide-video","_blank","https:\u002F\u002Fvueschool.io\u002Flessons\u002Fextending-and-altering-nuxt-configuration-and-options?friend=nuxt",[1024,1217,1218],{},"观看 Vue School 关于修改 Nuxt 配置的视频。",[1028,1220,1221],{"id":1221},"将选项暴露给运行时",[1024,1223,1224,1225,1231],{},"因为模块不属于应用运行时，它们的选项也不例外。然而，在许多情况下，你可能需要在运行时代码中访问其中一些模块选项。我们建议使用 Nuxt 的 ",[1203,1226,1228],{"href":1227},"\u002Fdocs\u002Fapi\u002Fnuxt-config#runtimeconfig",[1042,1229,1230],{},"runtimeConfig"," 来暴露所需的配置。",[1036,1233,1235],{"className":1038,"code":1234,"language":1040,"meta":354,"style":354},"import { defineNuxtModule } from '@nuxt\u002Fkit'\nimport { defu } from 'defu'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    nuxt.options.runtimeConfig.public.myModule = defu(nuxt.options.runtimeConfig.public.myModule, {\n      foo: options.foo,\n    })\n  },\n})\n",[1042,1236,1237,1255,1274,1278,1290,1306,1357,1376,1383,1387],{"__ignoreMap":354},[1045,1238,1239,1241,1243,1245,1247,1249,1251,1253],{"class":1047,"line":1048},[1045,1240,1052],{"class":1051},[1045,1242,1056],{"class":1055},[1045,1244,1060],{"class":1059},[1045,1246,1063],{"class":1055},[1045,1248,1066],{"class":1051},[1045,1250,1070],{"class":1069},[1045,1252,1074],{"class":1073},[1045,1254,1077],{"class":1069},[1045,1256,1257,1259,1261,1264,1266,1268,1270,1272],{"class":1047,"line":1080},[1045,1258,1052],{"class":1051},[1045,1260,1056],{"class":1055},[1045,1262,1263],{"class":1059}," defu",[1045,1265,1063],{"class":1055},[1045,1267,1066],{"class":1051},[1045,1269,1070],{"class":1069},[1045,1271,1208],{"class":1073},[1045,1273,1077],{"class":1069},[1045,1275,1276],{"class":1047,"line":1087},[1045,1277,1084],{"emptyLinePlaceholder":1083},[1045,1279,1280,1282,1284,1286,1288],{"class":1047,"line":1105},[1045,1281,1090],{"class":1051},[1045,1283,1093],{"class":1051},[1045,1285,1060],{"class":1096},[1045,1287,1099],{"class":1059},[1045,1289,1102],{"class":1055},[1045,1291,1292,1294,1296,1298,1300,1302,1304],{"class":1047,"line":1131},[1045,1293,1109],{"class":1108},[1045,1295,1112],{"class":1055},[1045,1297,1116],{"class":1115},[1045,1299,1119],{"class":1055},[1045,1301,1122],{"class":1115},[1045,1303,1125],{"class":1055},[1045,1305,1128],{"class":1055},[1045,1307,1308,1310,1312,1314,1316,1318,1320,1322,1324,1327,1329,1331,1334,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355],{"class":1047,"line":1138},[1045,1309,1141],{"class":1059},[1045,1311,1144],{"class":1055},[1045,1313,1116],{"class":1059},[1045,1315,1144],{"class":1055},[1045,1317,1230],{"class":1059},[1045,1319,1144],{"class":1055},[1045,1321,146],{"class":1059},[1045,1323,1144],{"class":1055},[1045,1325,1326],{"class":1059},"myModule",[1045,1328,1179],{"class":1154},[1045,1330,1263],{"class":1096},[1045,1332,1099],{"class":1333},"sOtFm",[1045,1335,1336],{"class":1059},"nuxt",[1045,1338,1144],{"class":1055},[1045,1340,1116],{"class":1059},[1045,1342,1144],{"class":1055},[1045,1344,1230],{"class":1059},[1045,1346,1144],{"class":1055},[1045,1348,146],{"class":1059},[1045,1350,1144],{"class":1055},[1045,1352,1326],{"class":1059},[1045,1354,1119],{"class":1055},[1045,1356,1128],{"class":1055},[1045,1358,1359,1362,1365,1368,1370,1373],{"class":1047,"line":1161},[1045,1360,1361],{"class":1333},"      foo",[1045,1363,1364],{"class":1055},":",[1045,1366,1367],{"class":1059}," options",[1045,1369,1144],{"class":1055},[1045,1371,1372],{"class":1059},"foo",[1045,1374,1375],{"class":1055},",\n",[1045,1377,1378,1381],{"class":1047,"line":1186},[1045,1379,1380],{"class":1055},"    }",[1045,1382,1198],{"class":1333},[1045,1384,1385],{"class":1047,"line":1192},[1045,1386,1189],{"class":1055},[1045,1388,1390,1392],{"class":1047,"line":1389},10,[1045,1391,1195],{"class":1055},[1045,1393,1198],{"class":1059},[1024,1395,1396,1397,1402],{},"注意我们使用 ",[1203,1398,1400],{"href":1205,"rel":1399},[1207],[1042,1401,1208],{}," 来扩展用户提供的公共运行时配置，而不是覆盖它。",[1024,1404,1405],{},"然后你可以在插件、组件、应用中像访问其它运行时配置一样访问你的模块选项：",[1036,1407,1409],{"className":1038,"code":1408,"language":1040,"meta":354,"style":354},"import { useRuntimeConfig } from '@nuxt\u002Fkit'\n\nconst options = useRuntimeConfig().public.myModule\n",[1042,1410,1411,1430,1434],{"__ignoreMap":354},[1045,1412,1413,1415,1417,1420,1422,1424,1426,1428],{"class":1047,"line":1048},[1045,1414,1052],{"class":1051},[1045,1416,1056],{"class":1055},[1045,1418,1419],{"class":1059}," useRuntimeConfig",[1045,1421,1063],{"class":1055},[1045,1423,1066],{"class":1051},[1045,1425,1070],{"class":1069},[1045,1427,1074],{"class":1073},[1045,1429,1077],{"class":1069},[1045,1431,1432],{"class":1047,"line":1080},[1045,1433,1084],{"emptyLinePlaceholder":1083},[1045,1435,1436,1440,1443,1445,1447,1450,1452,1454,1456],{"class":1047,"line":1087},[1045,1437,1439],{"class":1438},"sV7Px","const",[1045,1441,1367],{"class":1442},"sJTDI",[1045,1444,1179],{"class":1154},[1045,1446,1419],{"class":1096},[1045,1448,1449],{"class":1059},"()",[1045,1451,1144],{"class":1055},[1045,1453,146],{"class":1059},[1045,1455,1144],{"class":1055},[1045,1457,1458],{"class":1059},"myModule\n",[1460,1461,1462],"warning",{},[1024,1463,1464],{},"小心不要在公共运行时配置中暴露任何敏感的模块配置，例如私有 API 密钥，因为它们会被包含进公共包中。",[1466,1467,1468,1474,1477,1484,1624],"read-more",{"to":321},[1211,1469,1471],{"icon":1213,"target":1214,"to":1470},"https:\u002F\u002Fvueschool.io\u002Flessons\u002Fpassing-and-exposing-module-options?friend=nuxt",[1024,1472,1473],{},"观看 Vue School 关于传递和暴露 Nuxt 模块选项的视频。",[1028,1475,1476],{"id":1476},"添加插件",[1024,1478,1479,1480,1483],{},"插件是模块添加运行时逻辑的常用方式。你可以使用 ",[1042,1481,1482],{},"addPlugin"," 工具函数从你的模块注册它们。",[1036,1485,1487],{"className":1038,"code":1486,"language":1040,"meta":354,"style":354},"import { addPlugin, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    \u002F\u002F 创建 resolver 以解析相对路径\n    const resolver = createResolver(import.meta.url)\n\n    addPlugin(resolver.resolve('.\u002Fruntime\u002Fplugin'))\n  },\n})\n",[1042,1488,1489,1517,1521,1533,1549,1554,1582,1586,1614,1618],{"__ignoreMap":354},[1045,1490,1491,1493,1495,1498,1500,1503,1505,1507,1509,1511,1513,1515],{"class":1047,"line":1048},[1045,1492,1052],{"class":1051},[1045,1494,1056],{"class":1055},[1045,1496,1497],{"class":1059}," addPlugin",[1045,1499,1119],{"class":1055},[1045,1501,1502],{"class":1059}," createResolver",[1045,1504,1119],{"class":1055},[1045,1506,1060],{"class":1059},[1045,1508,1063],{"class":1055},[1045,1510,1066],{"class":1051},[1045,1512,1070],{"class":1069},[1045,1514,1074],{"class":1073},[1045,1516,1077],{"class":1069},[1045,1518,1519],{"class":1047,"line":1080},[1045,1520,1084],{"emptyLinePlaceholder":1083},[1045,1522,1523,1525,1527,1529,1531],{"class":1047,"line":1087},[1045,1524,1090],{"class":1051},[1045,1526,1093],{"class":1051},[1045,1528,1060],{"class":1096},[1045,1530,1099],{"class":1059},[1045,1532,1102],{"class":1055},[1045,1534,1535,1537,1539,1541,1543,1545,1547],{"class":1047,"line":1105},[1045,1536,1109],{"class":1108},[1045,1538,1112],{"class":1055},[1045,1540,1116],{"class":1115},[1045,1542,1119],{"class":1055},[1045,1544,1122],{"class":1115},[1045,1546,1125],{"class":1055},[1045,1548,1128],{"class":1055},[1045,1550,1551],{"class":1047,"line":1131},[1045,1552,1553],{"class":1134},"    \u002F\u002F 创建 resolver 以解析相对路径\n",[1045,1555,1556,1559,1562,1564,1566,1568,1570,1572,1575,1577,1580],{"class":1047,"line":1138},[1045,1557,1558],{"class":1438},"    const",[1045,1560,1561],{"class":1442}," resolver",[1045,1563,1179],{"class":1154},[1045,1565,1502],{"class":1096},[1045,1567,1099],{"class":1333},[1045,1569,1052],{"class":1051},[1045,1571,1144],{"class":1055},[1045,1573,1574],{"class":1442},"meta",[1045,1576,1144],{"class":1055},[1045,1578,1579],{"class":1059},"url",[1045,1581,1198],{"class":1333},[1045,1583,1584],{"class":1047,"line":1161},[1045,1585,1084],{"emptyLinePlaceholder":1083},[1045,1587,1588,1591,1593,1596,1598,1601,1603,1606,1609,1611],{"class":1047,"line":1186},[1045,1589,1590],{"class":1096},"    addPlugin",[1045,1592,1099],{"class":1333},[1045,1594,1595],{"class":1059},"resolver",[1045,1597,1144],{"class":1055},[1045,1599,1600],{"class":1096},"resolve",[1045,1602,1099],{"class":1333},[1045,1604,1605],{"class":1069},"'",[1045,1607,1608],{"class":1073},".\u002Fruntime\u002Fplugin",[1045,1610,1605],{"class":1069},[1045,1612,1613],{"class":1333},"))\n",[1045,1615,1616],{"class":1047,"line":1192},[1045,1617,1189],{"class":1055},[1045,1619,1620,1622],{"class":1047,"line":1389},[1045,1621,1195],{"class":1055},[1045,1623,1198],{"class":1059},[1466,1625,1626,1629,1636,1910,1917,2056,2065,2079,2082,2088,2271,2274,2471,2476,2602,2608,2616,2620,2629,2632,2637,2644,2827,2832,2911,2918,2977,2985,2990,2993,3167,3170,3329,3332,3550,3567,3570,3577,3713,3723,3951,3954,3961,4064],{"to":333},[1028,1627,1628],{"id":1628},"添加组件",[1024,1630,1631,1632,1635],{},"如果你的模块应该提供 Vue 组件，你可以使用 ",[1042,1633,1634],{},"addComponent"," 工具函数将它们作为自动导入添加，供 Nuxt 解析。",[1036,1637,1642],{"className":1638,"code":1639,"language":1640,"meta":1641,"style":354},"language-ts shiki shiki-themes material-theme-lighter github-dark material-theme-palenight","import { addComponent, createResolver, defineNuxtModule, useRuntimeConfig } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    \u002F\u002F 来自运行时目录\n    addComponent({\n      name: 'MySuperComponent', \u002F\u002F 在 vue 模板中使用的组件名\n      export: 'MySuperComponent', \u002F\u002F （可选）如果组件是命名（而非默认）导出\n      filePath: resolver.resolve('runtime\u002Fapp\u002Fcomponents\u002FMySuperComponent.vue'),\n    })\n\n    \u002F\u002F 来自某个库\n    addComponent({\n      name: 'MyAwesomeComponent', \u002F\u002F 在 vue 模板中使用的组件名\n      export: 'MyAwesomeComponent', \u002F\u002F （可选）如果组件是命名（而非默认）导出\n      filePath: '@vue\u002Fawesome-components',\n    })\n  },\n})\n","ts","twoslash",[1042,1643,1644,1675,1679,1691,1707,1731,1735,1740,1749,1768,1786,1813,1820,1825,1831,1840,1858,1875,1891,1898,1903],{"__ignoreMap":354},[1045,1645,1646,1648,1650,1653,1655,1657,1659,1661,1663,1665,1667,1669,1671,1673],{"class":1047,"line":1048},[1045,1647,1052],{"class":1051},[1045,1649,1056],{"class":1055},[1045,1651,1652],{"class":1059}," addComponent",[1045,1654,1119],{"class":1055},[1045,1656,1502],{"class":1059},[1045,1658,1119],{"class":1055},[1045,1660,1060],{"class":1059},[1045,1662,1119],{"class":1055},[1045,1664,1419],{"class":1059},[1045,1666,1063],{"class":1055},[1045,1668,1066],{"class":1051},[1045,1670,1070],{"class":1069},[1045,1672,1074],{"class":1073},[1045,1674,1077],{"class":1069},[1045,1676,1677],{"class":1047,"line":1080},[1045,1678,1084],{"emptyLinePlaceholder":1083},[1045,1680,1681,1683,1685,1687,1689],{"class":1047,"line":1087},[1045,1682,1090],{"class":1051},[1045,1684,1093],{"class":1051},[1045,1686,1060],{"class":1096},[1045,1688,1099],{"class":1059},[1045,1690,1102],{"class":1055},[1045,1692,1693,1695,1697,1699,1701,1703,1705],{"class":1047,"line":1105},[1045,1694,1109],{"class":1108},[1045,1696,1112],{"class":1055},[1045,1698,1116],{"class":1115},[1045,1700,1119],{"class":1055},[1045,1702,1122],{"class":1115},[1045,1704,1125],{"class":1055},[1045,1706,1128],{"class":1055},[1045,1708,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729],{"class":1047,"line":1131},[1045,1710,1558],{"class":1438},[1045,1712,1561],{"class":1442},[1045,1714,1179],{"class":1154},[1045,1716,1502],{"class":1096},[1045,1718,1099],{"class":1333},[1045,1720,1052],{"class":1051},[1045,1722,1144],{"class":1055},[1045,1724,1574],{"class":1442},[1045,1726,1144],{"class":1055},[1045,1728,1579],{"class":1059},[1045,1730,1198],{"class":1333},[1045,1732,1733],{"class":1047,"line":1138},[1045,1734,1084],{"emptyLinePlaceholder":1083},[1045,1736,1737],{"class":1047,"line":1161},[1045,1738,1739],{"class":1134},"    \u002F\u002F 来自运行时目录\n",[1045,1741,1742,1745,1747],{"class":1047,"line":1186},[1045,1743,1744],{"class":1096},"    addComponent",[1045,1746,1099],{"class":1333},[1045,1748,1102],{"class":1055},[1045,1750,1751,1754,1756,1758,1761,1763,1765],{"class":1047,"line":1192},[1045,1752,1753],{"class":1333},"      name",[1045,1755,1364],{"class":1055},[1045,1757,1070],{"class":1069},[1045,1759,1760],{"class":1073},"MySuperComponent",[1045,1762,1605],{"class":1069},[1045,1764,1119],{"class":1055},[1045,1766,1767],{"class":1134}," \u002F\u002F 在 vue 模板中使用的组件名\n",[1045,1769,1770,1773,1775,1777,1779,1781,1783],{"class":1047,"line":1389},[1045,1771,1772],{"class":1333},"      export",[1045,1774,1364],{"class":1055},[1045,1776,1070],{"class":1069},[1045,1778,1760],{"class":1073},[1045,1780,1605],{"class":1069},[1045,1782,1119],{"class":1055},[1045,1784,1785],{"class":1134}," \u002F\u002F （可选）如果组件是命名（而非默认）导出\n",[1045,1787,1789,1792,1794,1796,1798,1800,1802,1804,1807,1809,1811],{"class":1047,"line":1788},11,[1045,1790,1791],{"class":1333},"      filePath",[1045,1793,1364],{"class":1055},[1045,1795,1561],{"class":1059},[1045,1797,1144],{"class":1055},[1045,1799,1600],{"class":1096},[1045,1801,1099],{"class":1333},[1045,1803,1605],{"class":1069},[1045,1805,1806],{"class":1073},"runtime\u002Fapp\u002Fcomponents\u002FMySuperComponent.vue",[1045,1808,1605],{"class":1069},[1045,1810,1125],{"class":1333},[1045,1812,1375],{"class":1055},[1045,1814,1816,1818],{"class":1047,"line":1815},12,[1045,1817,1380],{"class":1055},[1045,1819,1198],{"class":1333},[1045,1821,1823],{"class":1047,"line":1822},13,[1045,1824,1084],{"emptyLinePlaceholder":1083},[1045,1826,1828],{"class":1047,"line":1827},14,[1045,1829,1830],{"class":1134},"    \u002F\u002F 来自某个库\n",[1045,1832,1834,1836,1838],{"class":1047,"line":1833},15,[1045,1835,1744],{"class":1096},[1045,1837,1099],{"class":1333},[1045,1839,1102],{"class":1055},[1045,1841,1843,1845,1847,1849,1852,1854,1856],{"class":1047,"line":1842},16,[1045,1844,1753],{"class":1333},[1045,1846,1364],{"class":1055},[1045,1848,1070],{"class":1069},[1045,1850,1851],{"class":1073},"MyAwesomeComponent",[1045,1853,1605],{"class":1069},[1045,1855,1119],{"class":1055},[1045,1857,1767],{"class":1134},[1045,1859,1861,1863,1865,1867,1869,1871,1873],{"class":1047,"line":1860},17,[1045,1862,1772],{"class":1333},[1045,1864,1364],{"class":1055},[1045,1866,1070],{"class":1069},[1045,1868,1851],{"class":1073},[1045,1870,1605],{"class":1069},[1045,1872,1119],{"class":1055},[1045,1874,1785],{"class":1134},[1045,1876,1878,1880,1882,1884,1887,1889],{"class":1047,"line":1877},18,[1045,1879,1791],{"class":1333},[1045,1881,1364],{"class":1055},[1045,1883,1070],{"class":1069},[1045,1885,1886],{"class":1073},"@vue\u002Fawesome-components",[1045,1888,1605],{"class":1069},[1045,1890,1375],{"class":1055},[1045,1892,1894,1896],{"class":1047,"line":1893},19,[1045,1895,1380],{"class":1055},[1045,1897,1198],{"class":1333},[1045,1899,1901],{"class":1047,"line":1900},20,[1045,1902,1189],{"class":1055},[1045,1904,1906,1908],{"class":1047,"line":1905},21,[1045,1907,1195],{"class":1055},[1045,1909,1198],{"class":1059},[1024,1911,1912,1913,1916],{},"或者，你可以使用 ",[1042,1914,1915],{},"addComponentsDir"," 添加一个完整的目录。",[1036,1918,1920],{"className":1638,"code":1919,"language":1640,"meta":354,"style":354},"import { addComponentsDir, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addComponentsDir({\n      path: resolver.resolve('runtime\u002Fapp\u002Fcomponents'),\n    })\n  },\n})\n",[1042,1921,1922,1945,1949,1961,1977,2001,2005,2014,2040,2046,2050],{"__ignoreMap":354},[1045,1923,1924,1926,1928,1931,1933,1935,1937,1939,1941,1943],{"class":1047,"line":1048},[1045,1925,1052],{"class":1051},[1045,1927,1056],{"class":1055},[1045,1929,1930],{"class":1059}," addComponentsDir",[1045,1932,1119],{"class":1055},[1045,1934,1060],{"class":1059},[1045,1936,1063],{"class":1055},[1045,1938,1066],{"class":1051},[1045,1940,1070],{"class":1069},[1045,1942,1074],{"class":1073},[1045,1944,1077],{"class":1069},[1045,1946,1947],{"class":1047,"line":1080},[1045,1948,1084],{"emptyLinePlaceholder":1083},[1045,1950,1951,1953,1955,1957,1959],{"class":1047,"line":1087},[1045,1952,1090],{"class":1051},[1045,1954,1093],{"class":1051},[1045,1956,1060],{"class":1096},[1045,1958,1099],{"class":1059},[1045,1960,1102],{"class":1055},[1045,1962,1963,1965,1967,1969,1971,1973,1975],{"class":1047,"line":1105},[1045,1964,1109],{"class":1108},[1045,1966,1112],{"class":1055},[1045,1968,1116],{"class":1115},[1045,1970,1119],{"class":1055},[1045,1972,1122],{"class":1115},[1045,1974,1125],{"class":1055},[1045,1976,1128],{"class":1055},[1045,1978,1979,1981,1983,1985,1987,1989,1991,1993,1995,1997,1999],{"class":1047,"line":1131},[1045,1980,1558],{"class":1438},[1045,1982,1561],{"class":1442},[1045,1984,1179],{"class":1154},[1045,1986,1502],{"class":1096},[1045,1988,1099],{"class":1333},[1045,1990,1052],{"class":1051},[1045,1992,1144],{"class":1055},[1045,1994,1574],{"class":1442},[1045,1996,1144],{"class":1055},[1045,1998,1579],{"class":1059},[1045,2000,1198],{"class":1333},[1045,2002,2003],{"class":1047,"line":1138},[1045,2004,1084],{"emptyLinePlaceholder":1083},[1045,2006,2007,2010,2012],{"class":1047,"line":1161},[1045,2008,2009],{"class":1096},"    addComponentsDir",[1045,2011,1099],{"class":1333},[1045,2013,1102],{"class":1055},[1045,2015,2016,2019,2021,2023,2025,2027,2029,2031,2034,2036,2038],{"class":1047,"line":1186},[1045,2017,2018],{"class":1333},"      path",[1045,2020,1364],{"class":1055},[1045,2022,1561],{"class":1059},[1045,2024,1144],{"class":1055},[1045,2026,1600],{"class":1096},[1045,2028,1099],{"class":1333},[1045,2030,1605],{"class":1069},[1045,2032,2033],{"class":1073},"runtime\u002Fapp\u002Fcomponents",[1045,2035,1605],{"class":1069},[1045,2037,1125],{"class":1333},[1045,2039,1375],{"class":1055},[1045,2041,2042,2044],{"class":1047,"line":1192},[1045,2043,1380],{"class":1055},[1045,2045,1198],{"class":1333},[1045,2047,2048],{"class":1047,"line":1389},[1045,2049,1189],{"class":1055},[1045,2051,2052,2054],{"class":1047,"line":1788},[1045,2053,1195],{"class":1055},[1045,2055,1198],{"class":1059},[1211,2057,2059,2062],{"icon":2058},"i-lucide-lightbulb",[1024,2060,2061],{},"强烈建议为你的导出添加前缀，以避免与用户代码或其它模块冲突。",[1466,2063],{"to":2064},"\u002Fdocs\u002Fguide\u002Fmodules\u002Fbest-practices#prefix-your-exports",[2066,2067,2068],"note",{},[1024,2069,2070,2071,2074,2075,2078],{},"注意，所有组件、页面、组合式函数以及其它通常会放在你的 ",[1042,2072,2073],{},"app\u002F"," 文件夹中的文件，都需要放在 ",[1042,2076,2077],{},"runtime\u002Fapp\u002F"," 中。这将意味着它们能被正确地进行类型检查。",[1028,2080,2081],{"id":2081},"添加组合式函数",[1024,2083,2084,2085,1635],{},"如果你的模块应该提供组合式函数，你可以使用 ",[1042,2086,2087],{},"addImports",[1036,2089,2091],{"className":1638,"code":2090,"language":1640,"meta":354,"style":354},"import { addImports, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addImports({\n      name: 'useComposable', \u002F\u002F 要使用的组合式函数名\n      as: 'useMyComposable', \u002F\u002F （可选）消费应用可用的别名\n      from: resolver.resolve('runtime\u002Fapp\u002Fcomposables\u002FuseComposable'), \u002F\u002F 组合式函数的路径\n    })\n  },\n})\n",[1042,2092,2093,2120,2124,2136,2152,2176,2180,2189,2207,2226,2255,2261,2265],{"__ignoreMap":354},[1045,2094,2095,2097,2099,2102,2104,2106,2108,2110,2112,2114,2116,2118],{"class":1047,"line":1048},[1045,2096,1052],{"class":1051},[1045,2098,1056],{"class":1055},[1045,2100,2101],{"class":1059}," addImports",[1045,2103,1119],{"class":1055},[1045,2105,1502],{"class":1059},[1045,2107,1119],{"class":1055},[1045,2109,1060],{"class":1059},[1045,2111,1063],{"class":1055},[1045,2113,1066],{"class":1051},[1045,2115,1070],{"class":1069},[1045,2117,1074],{"class":1073},[1045,2119,1077],{"class":1069},[1045,2121,2122],{"class":1047,"line":1080},[1045,2123,1084],{"emptyLinePlaceholder":1083},[1045,2125,2126,2128,2130,2132,2134],{"class":1047,"line":1087},[1045,2127,1090],{"class":1051},[1045,2129,1093],{"class":1051},[1045,2131,1060],{"class":1096},[1045,2133,1099],{"class":1059},[1045,2135,1102],{"class":1055},[1045,2137,2138,2140,2142,2144,2146,2148,2150],{"class":1047,"line":1105},[1045,2139,1109],{"class":1108},[1045,2141,1112],{"class":1055},[1045,2143,1116],{"class":1115},[1045,2145,1119],{"class":1055},[1045,2147,1122],{"class":1115},[1045,2149,1125],{"class":1055},[1045,2151,1128],{"class":1055},[1045,2153,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174],{"class":1047,"line":1131},[1045,2155,1558],{"class":1438},[1045,2157,1561],{"class":1442},[1045,2159,1179],{"class":1154},[1045,2161,1502],{"class":1096},[1045,2163,1099],{"class":1333},[1045,2165,1052],{"class":1051},[1045,2167,1144],{"class":1055},[1045,2169,1574],{"class":1442},[1045,2171,1144],{"class":1055},[1045,2173,1579],{"class":1059},[1045,2175,1198],{"class":1333},[1045,2177,2178],{"class":1047,"line":1138},[1045,2179,1084],{"emptyLinePlaceholder":1083},[1045,2181,2182,2185,2187],{"class":1047,"line":1161},[1045,2183,2184],{"class":1096},"    addImports",[1045,2186,1099],{"class":1333},[1045,2188,1102],{"class":1055},[1045,2190,2191,2193,2195,2197,2200,2202,2204],{"class":1047,"line":1186},[1045,2192,1753],{"class":1333},[1045,2194,1364],{"class":1055},[1045,2196,1070],{"class":1069},[1045,2198,2199],{"class":1073},"useComposable",[1045,2201,1605],{"class":1069},[1045,2203,1119],{"class":1055},[1045,2205,2206],{"class":1134}," \u002F\u002F 要使用的组合式函数名\n",[1045,2208,2209,2212,2214,2216,2219,2221,2223],{"class":1047,"line":1192},[1045,2210,2211],{"class":1333},"      as",[1045,2213,1364],{"class":1055},[1045,2215,1070],{"class":1069},[1045,2217,2218],{"class":1073},"useMyComposable",[1045,2220,1605],{"class":1069},[1045,2222,1119],{"class":1055},[1045,2224,2225],{"class":1134}," \u002F\u002F （可选）消费应用可用的别名\n",[1045,2227,2228,2231,2233,2235,2237,2239,2241,2243,2246,2248,2250,2252],{"class":1047,"line":1389},[1045,2229,2230],{"class":1333},"      from",[1045,2232,1364],{"class":1055},[1045,2234,1561],{"class":1059},[1045,2236,1144],{"class":1055},[1045,2238,1600],{"class":1096},[1045,2240,1099],{"class":1333},[1045,2242,1605],{"class":1069},[1045,2244,2245],{"class":1073},"runtime\u002Fapp\u002Fcomposables\u002FuseComposable",[1045,2247,1605],{"class":1069},[1045,2249,1125],{"class":1333},[1045,2251,1119],{"class":1055},[1045,2253,2254],{"class":1134}," \u002F\u002F 组合式函数的路径\n",[1045,2256,2257,2259],{"class":1047,"line":1788},[1045,2258,1380],{"class":1055},[1045,2260,1198],{"class":1333},[1045,2262,2263],{"class":1047,"line":1815},[1045,2264,1189],{"class":1055},[1045,2266,2267,2269],{"class":1047,"line":1822},[1045,2268,1195],{"class":1055},[1045,2270,1198],{"class":1059},[1024,2272,2273],{},"可以传入多个条目作为数组：",[1036,2275,2277],{"className":1638,"code":2276,"language":1640,"meta":354,"style":354},"import { addImports, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addImports([\n      { name: 'useFirstComposable', from: resolver.resolve('runtime\u002Fcomposables\u002FuseFirstComposable') },\n      { name: 'useSecondComposable', from: resolver.resolve('runtime\u002Fcomposables\u002FuseSecondComposable') },\n    ])\n  },\n})\n",[1042,2278,2279,2305,2309,2321,2337,2361,2365,2372,2416,2456,2461,2465],{"__ignoreMap":354},[1045,2280,2281,2283,2285,2287,2289,2291,2293,2295,2297,2299,2301,2303],{"class":1047,"line":1048},[1045,2282,1052],{"class":1051},[1045,2284,1056],{"class":1055},[1045,2286,2101],{"class":1059},[1045,2288,1119],{"class":1055},[1045,2290,1502],{"class":1059},[1045,2292,1119],{"class":1055},[1045,2294,1060],{"class":1059},[1045,2296,1063],{"class":1055},[1045,2298,1066],{"class":1051},[1045,2300,1070],{"class":1069},[1045,2302,1074],{"class":1073},[1045,2304,1077],{"class":1069},[1045,2306,2307],{"class":1047,"line":1080},[1045,2308,1084],{"emptyLinePlaceholder":1083},[1045,2310,2311,2313,2315,2317,2319],{"class":1047,"line":1087},[1045,2312,1090],{"class":1051},[1045,2314,1093],{"class":1051},[1045,2316,1060],{"class":1096},[1045,2318,1099],{"class":1059},[1045,2320,1102],{"class":1055},[1045,2322,2323,2325,2327,2329,2331,2333,2335],{"class":1047,"line":1105},[1045,2324,1109],{"class":1108},[1045,2326,1112],{"class":1055},[1045,2328,1116],{"class":1115},[1045,2330,1119],{"class":1055},[1045,2332,1122],{"class":1115},[1045,2334,1125],{"class":1055},[1045,2336,1128],{"class":1055},[1045,2338,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359],{"class":1047,"line":1131},[1045,2340,1558],{"class":1438},[1045,2342,1561],{"class":1442},[1045,2344,1179],{"class":1154},[1045,2346,1502],{"class":1096},[1045,2348,1099],{"class":1333},[1045,2350,1052],{"class":1051},[1045,2352,1144],{"class":1055},[1045,2354,1574],{"class":1442},[1045,2356,1144],{"class":1055},[1045,2358,1579],{"class":1059},[1045,2360,1198],{"class":1333},[1045,2362,2363],{"class":1047,"line":1138},[1045,2364,1084],{"emptyLinePlaceholder":1083},[1045,2366,2367,2369],{"class":1047,"line":1161},[1045,2368,2184],{"class":1096},[1045,2370,2371],{"class":1333},"([\n",[1045,2373,2374,2377,2380,2382,2384,2387,2389,2391,2393,2395,2397,2399,2401,2403,2405,2408,2410,2413],{"class":1047,"line":1186},[1045,2375,2376],{"class":1055},"      {",[1045,2378,2379],{"class":1333}," name",[1045,2381,1364],{"class":1055},[1045,2383,1070],{"class":1069},[1045,2385,2386],{"class":1073},"useFirstComposable",[1045,2388,1605],{"class":1069},[1045,2390,1119],{"class":1055},[1045,2392,1066],{"class":1333},[1045,2394,1364],{"class":1055},[1045,2396,1561],{"class":1059},[1045,2398,1144],{"class":1055},[1045,2400,1600],{"class":1096},[1045,2402,1099],{"class":1333},[1045,2404,1605],{"class":1069},[1045,2406,2407],{"class":1073},"runtime\u002Fcomposables\u002FuseFirstComposable",[1045,2409,1605],{"class":1069},[1045,2411,2412],{"class":1333},") ",[1045,2414,2415],{"class":1055},"},\n",[1045,2417,2418,2420,2422,2424,2426,2429,2431,2433,2435,2437,2439,2441,2443,2445,2447,2450,2452,2454],{"class":1047,"line":1192},[1045,2419,2376],{"class":1055},[1045,2421,2379],{"class":1333},[1045,2423,1364],{"class":1055},[1045,2425,1070],{"class":1069},[1045,2427,2428],{"class":1073},"useSecondComposable",[1045,2430,1605],{"class":1069},[1045,2432,1119],{"class":1055},[1045,2434,1066],{"class":1333},[1045,2436,1364],{"class":1055},[1045,2438,1561],{"class":1059},[1045,2440,1144],{"class":1055},[1045,2442,1600],{"class":1096},[1045,2444,1099],{"class":1333},[1045,2446,1605],{"class":1069},[1045,2448,2449],{"class":1073},"runtime\u002Fcomposables\u002FuseSecondComposable",[1045,2451,1605],{"class":1069},[1045,2453,2412],{"class":1333},[1045,2455,2415],{"class":1055},[1045,2457,2458],{"class":1047,"line":1389},[1045,2459,2460],{"class":1333},"    ])\n",[1045,2462,2463],{"class":1047,"line":1788},[1045,2464,1189],{"class":1055},[1045,2466,2467,2469],{"class":1047,"line":1815},[1045,2468,1195],{"class":1055},[1045,2470,1198],{"class":1059},[1024,2472,1912,2473,1916],{},[1042,2474,2475],{},"addImportsDir",[1036,2477,2479],{"className":1638,"code":2478,"language":1640,"meta":354,"style":354},"import { addImportsDir, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addImportsDir(resolver.resolve('runtime\u002Fcomposables'))\n  },\n})\n",[1042,2480,2481,2508,2512,2524,2540,2564,2568,2592,2596],{"__ignoreMap":354},[1045,2482,2483,2485,2487,2490,2492,2494,2496,2498,2500,2502,2504,2506],{"class":1047,"line":1048},[1045,2484,1052],{"class":1051},[1045,2486,1056],{"class":1055},[1045,2488,2489],{"class":1059}," addImportsDir",[1045,2491,1119],{"class":1055},[1045,2493,1502],{"class":1059},[1045,2495,1119],{"class":1055},[1045,2497,1060],{"class":1059},[1045,2499,1063],{"class":1055},[1045,2501,1066],{"class":1051},[1045,2503,1070],{"class":1069},[1045,2505,1074],{"class":1073},[1045,2507,1077],{"class":1069},[1045,2509,2510],{"class":1047,"line":1080},[1045,2511,1084],{"emptyLinePlaceholder":1083},[1045,2513,2514,2516,2518,2520,2522],{"class":1047,"line":1087},[1045,2515,1090],{"class":1051},[1045,2517,1093],{"class":1051},[1045,2519,1060],{"class":1096},[1045,2521,1099],{"class":1059},[1045,2523,1102],{"class":1055},[1045,2525,2526,2528,2530,2532,2534,2536,2538],{"class":1047,"line":1105},[1045,2527,1109],{"class":1108},[1045,2529,1112],{"class":1055},[1045,2531,1116],{"class":1115},[1045,2533,1119],{"class":1055},[1045,2535,1122],{"class":1115},[1045,2537,1125],{"class":1055},[1045,2539,1128],{"class":1055},[1045,2541,2542,2544,2546,2548,2550,2552,2554,2556,2558,2560,2562],{"class":1047,"line":1131},[1045,2543,1558],{"class":1438},[1045,2545,1561],{"class":1442},[1045,2547,1179],{"class":1154},[1045,2549,1502],{"class":1096},[1045,2551,1099],{"class":1333},[1045,2553,1052],{"class":1051},[1045,2555,1144],{"class":1055},[1045,2557,1574],{"class":1442},[1045,2559,1144],{"class":1055},[1045,2561,1579],{"class":1059},[1045,2563,1198],{"class":1333},[1045,2565,2566],{"class":1047,"line":1138},[1045,2567,1084],{"emptyLinePlaceholder":1083},[1045,2569,2570,2573,2575,2577,2579,2581,2583,2585,2588,2590],{"class":1047,"line":1161},[1045,2571,2572],{"class":1096},"    addImportsDir",[1045,2574,1099],{"class":1333},[1045,2576,1595],{"class":1059},[1045,2578,1144],{"class":1055},[1045,2580,1600],{"class":1096},[1045,2582,1099],{"class":1333},[1045,2584,1605],{"class":1069},[1045,2586,2587],{"class":1073},"runtime\u002Fcomposables",[1045,2589,1605],{"class":1069},[1045,2591,1613],{"class":1333},[1045,2593,2594],{"class":1047,"line":1186},[1045,2595,1189],{"class":1055},[1045,2597,2598,2600],{"class":1047,"line":1192},[1045,2599,1195],{"class":1055},[1045,2601,1198],{"class":1059},[1211,2603,2604,2606],{"icon":2058},[1024,2605,2061],{},[1466,2607],{"to":2064},[2066,2609,2610],{},[1024,2611,2070,2612,2074,2614,2078],{},[1042,2613,2073],{},[1042,2615,2077],{},[2617,2618,2619],"h3",{"id":2619},"添加带键函数",[1024,2621,2622,2623,2625,2626,2628],{},"有时，你可能需要保持服务端和客户端之间的状态一致性。Nuxt 内置的 ",[1042,2624,549],{}," 或 ",[1042,2627,441],{}," 组合式函数就是例子。Nuxt 提供了一种方式来注册这类函数，以实现自动键注入。",[1024,2630,2631],{},"当一个函数被注册后，如果该函数以少于指定数量的参数被调用，Nuxt 的编译器会自动注入一个唯一的键作为额外参数。这个键在服务端渲染和客户端水合之间保持稳定。",[1211,2633,2634],{},[1024,2635,2636],{},"注入的键是一个派生自文件路径和调用位置哈希值。",[1024,2638,2639,2640,2643],{},"使用 ",[1042,2641,2642],{},"keyedComposables"," 选项来注册你的函数：",[1036,2645,2647],{"className":1638,"code":2646,"language":1640,"meta":354,"style":354},"import { createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    nuxt.options.optimization.keyedComposables.push({\n      name: 'useMyState',\n      source: resolver.resolve('.\u002Fruntime\u002Fcomposables\u002Fstate'),\n      argumentLength: 2,\n    })\n  },\n})\n",[1042,2648,2649,2671,2675,2687,2703,2727,2731,2757,2772,2798,2811,2817,2821],{"__ignoreMap":354},[1045,2650,2651,2653,2655,2657,2659,2661,2663,2665,2667,2669],{"class":1047,"line":1048},[1045,2652,1052],{"class":1051},[1045,2654,1056],{"class":1055},[1045,2656,1502],{"class":1059},[1045,2658,1119],{"class":1055},[1045,2660,1060],{"class":1059},[1045,2662,1063],{"class":1055},[1045,2664,1066],{"class":1051},[1045,2666,1070],{"class":1069},[1045,2668,1074],{"class":1073},[1045,2670,1077],{"class":1069},[1045,2672,2673],{"class":1047,"line":1080},[1045,2674,1084],{"emptyLinePlaceholder":1083},[1045,2676,2677,2679,2681,2683,2685],{"class":1047,"line":1087},[1045,2678,1090],{"class":1051},[1045,2680,1093],{"class":1051},[1045,2682,1060],{"class":1096},[1045,2684,1099],{"class":1059},[1045,2686,1102],{"class":1055},[1045,2688,2689,2691,2693,2695,2697,2699,2701],{"class":1047,"line":1105},[1045,2690,1109],{"class":1108},[1045,2692,1112],{"class":1055},[1045,2694,1116],{"class":1115},[1045,2696,1119],{"class":1055},[1045,2698,1122],{"class":1115},[1045,2700,1125],{"class":1055},[1045,2702,1128],{"class":1055},[1045,2704,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725],{"class":1047,"line":1131},[1045,2706,1558],{"class":1438},[1045,2708,1561],{"class":1442},[1045,2710,1179],{"class":1154},[1045,2712,1502],{"class":1096},[1045,2714,1099],{"class":1333},[1045,2716,1052],{"class":1051},[1045,2718,1144],{"class":1055},[1045,2720,1574],{"class":1442},[1045,2722,1144],{"class":1055},[1045,2724,1579],{"class":1059},[1045,2726,1198],{"class":1333},[1045,2728,2729],{"class":1047,"line":1138},[1045,2730,1084],{"emptyLinePlaceholder":1083},[1045,2732,2733,2735,2737,2739,2741,2744,2746,2748,2750,2753,2755],{"class":1047,"line":1161},[1045,2734,1141],{"class":1059},[1045,2736,1144],{"class":1055},[1045,2738,1116],{"class":1059},[1045,2740,1144],{"class":1055},[1045,2742,2743],{"class":1059},"optimization",[1045,2745,1144],{"class":1055},[1045,2747,2642],{"class":1059},[1045,2749,1144],{"class":1055},[1045,2751,2752],{"class":1096},"push",[1045,2754,1099],{"class":1333},[1045,2756,1102],{"class":1055},[1045,2758,2759,2761,2763,2765,2768,2770],{"class":1047,"line":1186},[1045,2760,1753],{"class":1333},[1045,2762,1364],{"class":1055},[1045,2764,1070],{"class":1069},[1045,2766,2767],{"class":1073},"useMyState",[1045,2769,1605],{"class":1069},[1045,2771,1375],{"class":1055},[1045,2773,2774,2777,2779,2781,2783,2785,2787,2789,2792,2794,2796],{"class":1047,"line":1192},[1045,2775,2776],{"class":1333},"      source",[1045,2778,1364],{"class":1055},[1045,2780,1561],{"class":1059},[1045,2782,1144],{"class":1055},[1045,2784,1600],{"class":1096},[1045,2786,1099],{"class":1333},[1045,2788,1605],{"class":1069},[1045,2790,2791],{"class":1073},".\u002Fruntime\u002Fcomposables\u002Fstate",[1045,2793,1605],{"class":1069},[1045,2795,1125],{"class":1333},[1045,2797,1375],{"class":1055},[1045,2799,2800,2803,2805,2809],{"class":1047,"line":1389},[1045,2801,2802],{"class":1333},"      argumentLength",[1045,2804,1364],{"class":1055},[1045,2806,2808],{"class":2807},"sOUxV"," 2",[1045,2810,1375],{"class":1055},[1045,2812,2813,2815],{"class":1047,"line":1788},[1045,2814,1380],{"class":1055},[1045,2816,1198],{"class":1333},[1045,2818,2819],{"class":1047,"line":1815},[1045,2820,1189],{"class":1055},[1045,2822,2823,2825],{"class":1047,"line":1822},[1045,2824,1195],{"class":1055},[1045,2826,1198],{"class":1059},[1024,2828,2829,2831],{},[1042,2830,2642],{}," 配置接受一个对象数组，具有以下属性：",[2833,2834,2835,2851],"table",{},[2836,2837,2838],"thead",{},[2839,2840,2841,2845,2848],"tr",{},[2842,2843,2844],"th",{},"属性",[2842,2846,2847],{},"类型",[2842,2849,2850],{},"描述",[2852,2853,2854,2874,2896],"tbody",{},[2839,2855,2856,2862,2867],{},[2857,2858,2859],"td",{},[1042,2860,2861],{},"name",[2857,2863,2864],{},[1042,2865,2866],{},"string",[2857,2868,2869,2870,2873],{},"函数名。默认导出使用 ",[1042,2871,2872],{},"'default'","（可调用名称将从文件名派生为 camelCase）。",[2839,2875,2876,2881,2885],{},[2857,2877,2878],{},[1042,2879,2880],{},"source",[2857,2882,2883],{},[1042,2884,2866],{},[2857,2886,2887,2888,2891,2892,2895],{},"函数定义文件的解析路径。支持 Nuxt 别名（",[1042,2889,2890],{},"~","、",[1042,2893,2894],{},"@"," 等）",[2839,2897,2898,2903,2908],{},[2857,2899,2900],{},[1042,2901,2902],{},"argumentLength",[2857,2904,2905],{},[1042,2906,2907],{},"number",[2857,2909,2910],{},"函数接受的最大参数数量。当以更少参数调用时，会注入一个唯一的键。",[1024,2912,2913,2914,2917],{},"例如，当 ",[1042,2915,2916],{},"argumentLength: 2","：",[1036,2919,2921],{"className":1638,"code":2920,"language":1640,"meta":354,"style":354},"useMyState() \u002F\u002F useMyState('$HJiaryoL2y')\nuseMyState('myKey') \u002F\u002F useMyState('myKey', '$HJiaryoL2y')\nuseMyState('a', 'b') \u002F\u002F 不转换（已经有 2 个参数）\n",[1042,2922,2923,2933,2951],{"__ignoreMap":354},[1045,2924,2925,2927,2930],{"class":1047,"line":1048},[1045,2926,2767],{"class":1096},[1045,2928,2929],{"class":1059},"() ",[1045,2931,2932],{"class":1134},"\u002F\u002F useMyState('$HJiaryoL2y')\n",[1045,2934,2935,2937,2939,2941,2944,2946,2948],{"class":1047,"line":1080},[1045,2936,2767],{"class":1096},[1045,2938,1099],{"class":1059},[1045,2940,1605],{"class":1069},[1045,2942,2943],{"class":1073},"myKey",[1045,2945,1605],{"class":1069},[1045,2947,2412],{"class":1059},[1045,2949,2950],{"class":1134},"\u002F\u002F useMyState('myKey', '$HJiaryoL2y')\n",[1045,2952,2953,2955,2957,2959,2961,2963,2965,2967,2970,2972,2974],{"class":1047,"line":1087},[1045,2954,2767],{"class":1096},[1045,2956,1099],{"class":1059},[1045,2958,1605],{"class":1069},[1045,2960,1203],{"class":1073},[1045,2962,1605],{"class":1069},[1045,2964,1119],{"class":1055},[1045,2966,1070],{"class":1069},[1045,2968,2969],{"class":1073},"b",[1045,2971,1605],{"class":1069},[1045,2973,2412],{"class":1059},[1045,2975,2976],{"class":1134},"\u002F\u002F 不转换（已经有 2 个参数）\n",[1460,2978,2979],{},[1024,2980,2981,2982,2984],{},"键注入插件会验证每个函数调用的精确解析导入源。它不会跟踪 barrel 导出。函数必须从 ",[1042,2983,2880],{}," 属性中指定的确切源文件导出。",[1460,2986,2987],{},[1024,2988,2989],{},"函数调用必须是静态可分析的。编译器无法为动态或间接的函数调用注入键。",[1028,2991,2992],{"id":2992},"添加路由中间件",[1036,2994,2996],{"className":1638,"code":2995,"language":1640,"meta":354,"style":354},"import { addRouteMiddleware, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    \u002F\u002F 添加全局路由中间件的示例\n    addRouteMiddleware({\n      global: true,\n      name: 'name-of-your-middleware',\n      path: resolver.resolve('.\u002Fruntime\u002Fmiddleware\u002Fname-of-your-middleware'),\n    })\n  },\n})\n",[1042,2997,2998,3025,3029,3041,3057,3081,3085,3090,3099,3111,3126,3151,3157,3161],{"__ignoreMap":354},[1045,2999,3000,3002,3004,3007,3009,3011,3013,3015,3017,3019,3021,3023],{"class":1047,"line":1048},[1045,3001,1052],{"class":1051},[1045,3003,1056],{"class":1055},[1045,3005,3006],{"class":1059}," addRouteMiddleware",[1045,3008,1119],{"class":1055},[1045,3010,1502],{"class":1059},[1045,3012,1119],{"class":1055},[1045,3014,1060],{"class":1059},[1045,3016,1063],{"class":1055},[1045,3018,1066],{"class":1051},[1045,3020,1070],{"class":1069},[1045,3022,1074],{"class":1073},[1045,3024,1077],{"class":1069},[1045,3026,3027],{"class":1047,"line":1080},[1045,3028,1084],{"emptyLinePlaceholder":1083},[1045,3030,3031,3033,3035,3037,3039],{"class":1047,"line":1087},[1045,3032,1090],{"class":1051},[1045,3034,1093],{"class":1051},[1045,3036,1060],{"class":1096},[1045,3038,1099],{"class":1059},[1045,3040,1102],{"class":1055},[1045,3042,3043,3045,3047,3049,3051,3053,3055],{"class":1047,"line":1105},[1045,3044,1109],{"class":1108},[1045,3046,1112],{"class":1055},[1045,3048,1116],{"class":1115},[1045,3050,1119],{"class":1055},[1045,3052,1122],{"class":1115},[1045,3054,1125],{"class":1055},[1045,3056,1128],{"class":1055},[1045,3058,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079],{"class":1047,"line":1131},[1045,3060,1558],{"class":1438},[1045,3062,1561],{"class":1442},[1045,3064,1179],{"class":1154},[1045,3066,1502],{"class":1096},[1045,3068,1099],{"class":1333},[1045,3070,1052],{"class":1051},[1045,3072,1144],{"class":1055},[1045,3074,1574],{"class":1442},[1045,3076,1144],{"class":1055},[1045,3078,1579],{"class":1059},[1045,3080,1198],{"class":1333},[1045,3082,3083],{"class":1047,"line":1138},[1045,3084,1084],{"emptyLinePlaceholder":1083},[1045,3086,3087],{"class":1047,"line":1161},[1045,3088,3089],{"class":1134},"    \u002F\u002F 添加全局路由中间件的示例\n",[1045,3091,3092,3095,3097],{"class":1047,"line":1186},[1045,3093,3094],{"class":1096},"    addRouteMiddleware",[1045,3096,1099],{"class":1333},[1045,3098,1102],{"class":1055},[1045,3100,3101,3104,3106,3109],{"class":1047,"line":1192},[1045,3102,3103],{"class":1333},"      global",[1045,3105,1364],{"class":1055},[1045,3107,3108],{"class":1182}," true",[1045,3110,1375],{"class":1055},[1045,3112,3113,3115,3117,3119,3122,3124],{"class":1047,"line":1389},[1045,3114,1753],{"class":1333},[1045,3116,1364],{"class":1055},[1045,3118,1070],{"class":1069},[1045,3120,3121],{"class":1073},"name-of-your-middleware",[1045,3123,1605],{"class":1069},[1045,3125,1375],{"class":1055},[1045,3127,3128,3130,3132,3134,3136,3138,3140,3142,3145,3147,3149],{"class":1047,"line":1788},[1045,3129,2018],{"class":1333},[1045,3131,1364],{"class":1055},[1045,3133,1561],{"class":1059},[1045,3135,1144],{"class":1055},[1045,3137,1600],{"class":1096},[1045,3139,1099],{"class":1333},[1045,3141,1605],{"class":1069},[1045,3143,3144],{"class":1073},".\u002Fruntime\u002Fmiddleware\u002Fname-of-your-middleware",[1045,3146,1605],{"class":1069},[1045,3148,1125],{"class":1333},[1045,3150,1375],{"class":1055},[1045,3152,3153,3155],{"class":1047,"line":1815},[1045,3154,1380],{"class":1055},[1045,3156,1198],{"class":1333},[1045,3158,3159],{"class":1047,"line":1822},[1045,3160,1189],{"class":1055},[1045,3162,3163,3165],{"class":1047,"line":1827},[1045,3164,1195],{"class":1055},[1045,3166,1198],{"class":1059},[1028,3168,3169],{"id":3169},"添加服务端路由",[1036,3171,3173],{"className":1638,"code":3172,"language":1640,"meta":354,"style":354},"import { addServerHandler, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addServerHandler({\n      route: '\u002Fapi\u002F_my-module\u002Fhello',\n      handler: resolver.resolve('.\u002Fruntime\u002Fserver\u002Fapi\u002Fhello\u002Findex.get'),\n    })\n  },\n})\n",[1042,3174,3175,3202,3206,3218,3234,3258,3262,3271,3287,3313,3319,3323],{"__ignoreMap":354},[1045,3176,3177,3179,3181,3184,3186,3188,3190,3192,3194,3196,3198,3200],{"class":1047,"line":1048},[1045,3178,1052],{"class":1051},[1045,3180,1056],{"class":1055},[1045,3182,3183],{"class":1059}," addServerHandler",[1045,3185,1119],{"class":1055},[1045,3187,1502],{"class":1059},[1045,3189,1119],{"class":1055},[1045,3191,1060],{"class":1059},[1045,3193,1063],{"class":1055},[1045,3195,1066],{"class":1051},[1045,3197,1070],{"class":1069},[1045,3199,1074],{"class":1073},[1045,3201,1077],{"class":1069},[1045,3203,3204],{"class":1047,"line":1080},[1045,3205,1084],{"emptyLinePlaceholder":1083},[1045,3207,3208,3210,3212,3214,3216],{"class":1047,"line":1087},[1045,3209,1090],{"class":1051},[1045,3211,1093],{"class":1051},[1045,3213,1060],{"class":1096},[1045,3215,1099],{"class":1059},[1045,3217,1102],{"class":1055},[1045,3219,3220,3222,3224,3226,3228,3230,3232],{"class":1047,"line":1105},[1045,3221,1109],{"class":1108},[1045,3223,1112],{"class":1055},[1045,3225,1116],{"class":1115},[1045,3227,1119],{"class":1055},[1045,3229,1122],{"class":1115},[1045,3231,1125],{"class":1055},[1045,3233,1128],{"class":1055},[1045,3235,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256],{"class":1047,"line":1131},[1045,3237,1558],{"class":1438},[1045,3239,1561],{"class":1442},[1045,3241,1179],{"class":1154},[1045,3243,1502],{"class":1096},[1045,3245,1099],{"class":1333},[1045,3247,1052],{"class":1051},[1045,3249,1144],{"class":1055},[1045,3251,1574],{"class":1442},[1045,3253,1144],{"class":1055},[1045,3255,1579],{"class":1059},[1045,3257,1198],{"class":1333},[1045,3259,3260],{"class":1047,"line":1138},[1045,3261,1084],{"emptyLinePlaceholder":1083},[1045,3263,3264,3267,3269],{"class":1047,"line":1161},[1045,3265,3266],{"class":1096},"    addServerHandler",[1045,3268,1099],{"class":1333},[1045,3270,1102],{"class":1055},[1045,3272,3273,3276,3278,3280,3283,3285],{"class":1047,"line":1186},[1045,3274,3275],{"class":1333},"      route",[1045,3277,1364],{"class":1055},[1045,3279,1070],{"class":1069},[1045,3281,3282],{"class":1073},"\u002Fapi\u002F_my-module\u002Fhello",[1045,3284,1605],{"class":1069},[1045,3286,1375],{"class":1055},[1045,3288,3289,3292,3294,3296,3298,3300,3302,3304,3307,3309,3311],{"class":1047,"line":1192},[1045,3290,3291],{"class":1333},"      handler",[1045,3293,1364],{"class":1055},[1045,3295,1561],{"class":1059},[1045,3297,1144],{"class":1055},[1045,3299,1600],{"class":1096},[1045,3301,1099],{"class":1333},[1045,3303,1605],{"class":1069},[1045,3305,3306],{"class":1073},".\u002Fruntime\u002Fserver\u002Fapi\u002Fhello\u002Findex.get",[1045,3308,1605],{"class":1069},[1045,3310,1125],{"class":1333},[1045,3312,1375],{"class":1055},[1045,3314,3315,3317],{"class":1047,"line":1389},[1045,3316,1380],{"class":1055},[1045,3318,1198],{"class":1333},[1045,3320,3321],{"class":1047,"line":1788},[1045,3322,1189],{"class":1055},[1045,3324,3325,3327],{"class":1047,"line":1815},[1045,3326,1195],{"class":1055},[1045,3328,1198],{"class":1059},[1024,3330,3331],{},"你也可以添加动态服务端路由：",[1036,3333,3335],{"className":1638,"code":3334,"language":1640,"meta":354,"style":354},"import { addServerHandler, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    addServerHandler({\n      route: '\u002Fapi\u002F_my-module\u002Fhello\u002F:name',\n      handler: resolver.resolve('.\u002Fruntime\u002Fserver\u002Fapi\u002Fhello\u002F[name].get'),\n    })\n\n    \u002F\u002F 或者使用全捕获路由\n    addServerHandler({\n      route: '\u002Fapi\u002F_my-module\u002Ffiles\u002F**:path',\n      handler: resolver.resolve('.\u002Fruntime\u002Fserver\u002Fapi\u002Ffiles\u002F[...path].get'),\n    })\n  },\n})\n",[1042,3336,3337,3363,3367,3379,3395,3419,3423,3431,3446,3471,3477,3481,3486,3494,3509,3534,3540,3544],{"__ignoreMap":354},[1045,3338,3339,3341,3343,3345,3347,3349,3351,3353,3355,3357,3359,3361],{"class":1047,"line":1048},[1045,3340,1052],{"class":1051},[1045,3342,1056],{"class":1055},[1045,3344,3183],{"class":1059},[1045,3346,1119],{"class":1055},[1045,3348,1502],{"class":1059},[1045,3350,1119],{"class":1055},[1045,3352,1060],{"class":1059},[1045,3354,1063],{"class":1055},[1045,3356,1066],{"class":1051},[1045,3358,1070],{"class":1069},[1045,3360,1074],{"class":1073},[1045,3362,1077],{"class":1069},[1045,3364,3365],{"class":1047,"line":1080},[1045,3366,1084],{"emptyLinePlaceholder":1083},[1045,3368,3369,3371,3373,3375,3377],{"class":1047,"line":1087},[1045,3370,1090],{"class":1051},[1045,3372,1093],{"class":1051},[1045,3374,1060],{"class":1096},[1045,3376,1099],{"class":1059},[1045,3378,1102],{"class":1055},[1045,3380,3381,3383,3385,3387,3389,3391,3393],{"class":1047,"line":1105},[1045,3382,1109],{"class":1108},[1045,3384,1112],{"class":1055},[1045,3386,1116],{"class":1115},[1045,3388,1119],{"class":1055},[1045,3390,1122],{"class":1115},[1045,3392,1125],{"class":1055},[1045,3394,1128],{"class":1055},[1045,3396,3397,3399,3401,3403,3405,3407,3409,3411,3413,3415,3417],{"class":1047,"line":1131},[1045,3398,1558],{"class":1438},[1045,3400,1561],{"class":1442},[1045,3402,1179],{"class":1154},[1045,3404,1502],{"class":1096},[1045,3406,1099],{"class":1333},[1045,3408,1052],{"class":1051},[1045,3410,1144],{"class":1055},[1045,3412,1574],{"class":1442},[1045,3414,1144],{"class":1055},[1045,3416,1579],{"class":1059},[1045,3418,1198],{"class":1333},[1045,3420,3421],{"class":1047,"line":1138},[1045,3422,1084],{"emptyLinePlaceholder":1083},[1045,3424,3425,3427,3429],{"class":1047,"line":1161},[1045,3426,3266],{"class":1096},[1045,3428,1099],{"class":1333},[1045,3430,1102],{"class":1055},[1045,3432,3433,3435,3437,3439,3442,3444],{"class":1047,"line":1186},[1045,3434,3275],{"class":1333},[1045,3436,1364],{"class":1055},[1045,3438,1070],{"class":1069},[1045,3440,3441],{"class":1073},"\u002Fapi\u002F_my-module\u002Fhello\u002F:name",[1045,3443,1605],{"class":1069},[1045,3445,1375],{"class":1055},[1045,3447,3448,3450,3452,3454,3456,3458,3460,3462,3465,3467,3469],{"class":1047,"line":1192},[1045,3449,3291],{"class":1333},[1045,3451,1364],{"class":1055},[1045,3453,1561],{"class":1059},[1045,3455,1144],{"class":1055},[1045,3457,1600],{"class":1096},[1045,3459,1099],{"class":1333},[1045,3461,1605],{"class":1069},[1045,3463,3464],{"class":1073},".\u002Fruntime\u002Fserver\u002Fapi\u002Fhello\u002F[name].get",[1045,3466,1605],{"class":1069},[1045,3468,1125],{"class":1333},[1045,3470,1375],{"class":1055},[1045,3472,3473,3475],{"class":1047,"line":1389},[1045,3474,1380],{"class":1055},[1045,3476,1198],{"class":1333},[1045,3478,3479],{"class":1047,"line":1788},[1045,3480,1084],{"emptyLinePlaceholder":1083},[1045,3482,3483],{"class":1047,"line":1815},[1045,3484,3485],{"class":1134},"    \u002F\u002F 或者使用全捕获路由\n",[1045,3487,3488,3490,3492],{"class":1047,"line":1822},[1045,3489,3266],{"class":1096},[1045,3491,1099],{"class":1333},[1045,3493,1102],{"class":1055},[1045,3495,3496,3498,3500,3502,3505,3507],{"class":1047,"line":1827},[1045,3497,3275],{"class":1333},[1045,3499,1364],{"class":1055},[1045,3501,1070],{"class":1069},[1045,3503,3504],{"class":1073},"\u002Fapi\u002F_my-module\u002Ffiles\u002F**:path",[1045,3506,1605],{"class":1069},[1045,3508,1375],{"class":1055},[1045,3510,3511,3513,3515,3517,3519,3521,3523,3525,3528,3530,3532],{"class":1047,"line":1833},[1045,3512,3291],{"class":1333},[1045,3514,1364],{"class":1055},[1045,3516,1561],{"class":1059},[1045,3518,1144],{"class":1055},[1045,3520,1600],{"class":1096},[1045,3522,1099],{"class":1333},[1045,3524,1605],{"class":1069},[1045,3526,3527],{"class":1073},".\u002Fruntime\u002Fserver\u002Fapi\u002Ffiles\u002F[...path].get",[1045,3529,1605],{"class":1069},[1045,3531,1125],{"class":1333},[1045,3533,1375],{"class":1055},[1045,3535,3536,3538],{"class":1047,"line":1842},[1045,3537,1380],{"class":1055},[1045,3539,1198],{"class":1333},[1045,3541,3542],{"class":1047,"line":1860},[1045,3543,1189],{"class":1055},[1045,3545,3546,3548],{"class":1047,"line":1877},[1045,3547,1195],{"class":1055},[1045,3549,1198],{"class":1059},[1211,3551,3552,3565],{"icon":2058},[1024,3553,3554,3555,2891,3558,2625,3561,3564],{},"强烈建议为你的服务端路由添加前缀，以避免与用户定义的路由冲突。像 ",[1042,3556,3557],{},"\u002Fapi\u002Fauth",[1042,3559,3560],{},"\u002Fapi\u002Flogin",[1042,3562,3563],{},"\u002Fapi\u002Fuser"," 这样的常见路径可能已经被应用使用。",[1466,3566],{"to":2064},[1028,3568,3569],{"id":3569},"添加其它资源",[1024,3571,3572,3573,3576],{},"如果你的模块应该提供其它类型的资源，它们也可以被注入。下面是一个通过 Nuxt 的 ",[1042,3574,3575],{},"css"," 数组注入样式表的简单示例模块。",[1036,3578,3580],{"className":1038,"code":3579,"language":1040,"meta":354,"style":354},"import { addPlugin, createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    nuxt.options.css.push(resolver.resolve('.\u002Fruntime\u002Fstyle.css'))\n  },\n})\n",[1042,3581,3582,3608,3612,3624,3640,3664,3668,3703,3707],{"__ignoreMap":354},[1045,3583,3584,3586,3588,3590,3592,3594,3596,3598,3600,3602,3604,3606],{"class":1047,"line":1048},[1045,3585,1052],{"class":1051},[1045,3587,1056],{"class":1055},[1045,3589,1497],{"class":1059},[1045,3591,1119],{"class":1055},[1045,3593,1502],{"class":1059},[1045,3595,1119],{"class":1055},[1045,3597,1060],{"class":1059},[1045,3599,1063],{"class":1055},[1045,3601,1066],{"class":1051},[1045,3603,1070],{"class":1069},[1045,3605,1074],{"class":1073},[1045,3607,1077],{"class":1069},[1045,3609,3610],{"class":1047,"line":1080},[1045,3611,1084],{"emptyLinePlaceholder":1083},[1045,3613,3614,3616,3618,3620,3622],{"class":1047,"line":1087},[1045,3615,1090],{"class":1051},[1045,3617,1093],{"class":1051},[1045,3619,1060],{"class":1096},[1045,3621,1099],{"class":1059},[1045,3623,1102],{"class":1055},[1045,3625,3626,3628,3630,3632,3634,3636,3638],{"class":1047,"line":1105},[1045,3627,1109],{"class":1108},[1045,3629,1112],{"class":1055},[1045,3631,1116],{"class":1115},[1045,3633,1119],{"class":1055},[1045,3635,1122],{"class":1115},[1045,3637,1125],{"class":1055},[1045,3639,1128],{"class":1055},[1045,3641,3642,3644,3646,3648,3650,3652,3654,3656,3658,3660,3662],{"class":1047,"line":1131},[1045,3643,1558],{"class":1438},[1045,3645,1561],{"class":1442},[1045,3647,1179],{"class":1154},[1045,3649,1502],{"class":1096},[1045,3651,1099],{"class":1333},[1045,3653,1052],{"class":1051},[1045,3655,1144],{"class":1055},[1045,3657,1574],{"class":1442},[1045,3659,1144],{"class":1055},[1045,3661,1579],{"class":1059},[1045,3663,1198],{"class":1333},[1045,3665,3666],{"class":1047,"line":1138},[1045,3667,1084],{"emptyLinePlaceholder":1083},[1045,3669,3670,3672,3674,3676,3678,3680,3682,3684,3686,3688,3690,3692,3694,3696,3699,3701],{"class":1047,"line":1161},[1045,3671,1141],{"class":1059},[1045,3673,1144],{"class":1055},[1045,3675,1116],{"class":1059},[1045,3677,1144],{"class":1055},[1045,3679,3575],{"class":1059},[1045,3681,1144],{"class":1055},[1045,3683,2752],{"class":1096},[1045,3685,1099],{"class":1333},[1045,3687,1595],{"class":1059},[1045,3689,1144],{"class":1055},[1045,3691,1600],{"class":1096},[1045,3693,1099],{"class":1333},[1045,3695,1605],{"class":1069},[1045,3697,3698],{"class":1073},".\u002Fruntime\u002Fstyle.css",[1045,3700,1605],{"class":1069},[1045,3702,1613],{"class":1333},[1045,3704,3705],{"class":1047,"line":1186},[1045,3706,1189],{"class":1055},[1045,3708,3709,3711],{"class":1047,"line":1192},[1045,3710,1195],{"class":1055},[1045,3712,1198],{"class":1059},[1024,3714,3715,3716,3718,3719,3722],{},"还有一个更高级的示例，通过 ",[1203,3717,749],{"href":209}," 的 ",[1042,3720,3721],{},"publicAssets"," 选项暴露一个资源文件夹：",[1036,3724,3726],{"className":1038,"code":3725,"language":1040,"meta":354,"style":354},"import { createResolver, defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  setup (options, nuxt) {\n    const resolver = createResolver(import.meta.url)\n\n    nuxt.hook('nitro:config', (nitroConfig) => {\n      nitroConfig.publicAssets ||= []\n      nitroConfig.publicAssets.push({\n        dir: resolver.resolve('.\u002Fruntime\u002Fpublic'),\n        maxAge: 60 * 60 * 24 * 365, \u002F\u002F 1 年\n      })\n    })\n  },\n})\n",[1042,3727,3728,3750,3754,3766,3782,3806,3810,3842,3856,3872,3898,3928,3935,3941,3945],{"__ignoreMap":354},[1045,3729,3730,3732,3734,3736,3738,3740,3742,3744,3746,3748],{"class":1047,"line":1048},[1045,3731,1052],{"class":1051},[1045,3733,1056],{"class":1055},[1045,3735,1502],{"class":1059},[1045,3737,1119],{"class":1055},[1045,3739,1060],{"class":1059},[1045,3741,1063],{"class":1055},[1045,3743,1066],{"class":1051},[1045,3745,1070],{"class":1069},[1045,3747,1074],{"class":1073},[1045,3749,1077],{"class":1069},[1045,3751,3752],{"class":1047,"line":1080},[1045,3753,1084],{"emptyLinePlaceholder":1083},[1045,3755,3756,3758,3760,3762,3764],{"class":1047,"line":1087},[1045,3757,1090],{"class":1051},[1045,3759,1093],{"class":1051},[1045,3761,1060],{"class":1096},[1045,3763,1099],{"class":1059},[1045,3765,1102],{"class":1055},[1045,3767,3768,3770,3772,3774,3776,3778,3780],{"class":1047,"line":1105},[1045,3769,1109],{"class":1108},[1045,3771,1112],{"class":1055},[1045,3773,1116],{"class":1115},[1045,3775,1119],{"class":1055},[1045,3777,1122],{"class":1115},[1045,3779,1125],{"class":1055},[1045,3781,1128],{"class":1055},[1045,3783,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804],{"class":1047,"line":1131},[1045,3785,1558],{"class":1438},[1045,3787,1561],{"class":1442},[1045,3789,1179],{"class":1154},[1045,3791,1502],{"class":1096},[1045,3793,1099],{"class":1333},[1045,3795,1052],{"class":1051},[1045,3797,1144],{"class":1055},[1045,3799,1574],{"class":1442},[1045,3801,1144],{"class":1055},[1045,3803,1579],{"class":1059},[1045,3805,1198],{"class":1333},[1045,3807,3808],{"class":1047,"line":1138},[1045,3809,1084],{"emptyLinePlaceholder":1083},[1045,3811,3812,3814,3816,3819,3821,3823,3826,3828,3830,3832,3835,3837,3840],{"class":1047,"line":1161},[1045,3813,1141],{"class":1059},[1045,3815,1144],{"class":1055},[1045,3817,3818],{"class":1096},"hook",[1045,3820,1099],{"class":1333},[1045,3822,1605],{"class":1069},[1045,3824,3825],{"class":1073},"nitro:config",[1045,3827,1605],{"class":1069},[1045,3829,1119],{"class":1055},[1045,3831,1112],{"class":1055},[1045,3833,3834],{"class":1115},"nitroConfig",[1045,3836,1125],{"class":1055},[1045,3838,3839],{"class":1438}," =>",[1045,3841,1128],{"class":1055},[1045,3843,3844,3847,3849,3851,3853],{"class":1047,"line":1186},[1045,3845,3846],{"class":1059},"      nitroConfig",[1045,3848,1144],{"class":1055},[1045,3850,3721],{"class":1059},[1045,3852,1155],{"class":1154},[1045,3854,3855],{"class":1333}," []\n",[1045,3857,3858,3860,3862,3864,3866,3868,3870],{"class":1047,"line":1192},[1045,3859,3846],{"class":1059},[1045,3861,1144],{"class":1055},[1045,3863,3721],{"class":1059},[1045,3865,1144],{"class":1055},[1045,3867,2752],{"class":1096},[1045,3869,1099],{"class":1333},[1045,3871,1102],{"class":1055},[1045,3873,3874,3877,3879,3881,3883,3885,3887,3889,3892,3894,3896],{"class":1047,"line":1389},[1045,3875,3876],{"class":1333},"        dir",[1045,3878,1364],{"class":1055},[1045,3880,1561],{"class":1059},[1045,3882,1144],{"class":1055},[1045,3884,1600],{"class":1096},[1045,3886,1099],{"class":1333},[1045,3888,1605],{"class":1069},[1045,3890,3891],{"class":1073},".\u002Fruntime\u002Fpublic",[1045,3893,1605],{"class":1069},[1045,3895,1125],{"class":1333},[1045,3897,1375],{"class":1055},[1045,3899,3900,3903,3905,3908,3911,3913,3915,3918,3920,3923,3925],{"class":1047,"line":1788},[1045,3901,3902],{"class":1333},"        maxAge",[1045,3904,1364],{"class":1055},[1045,3906,3907],{"class":2807}," 60",[1045,3909,3910],{"class":1154}," *",[1045,3912,3907],{"class":2807},[1045,3914,3910],{"class":1154},[1045,3916,3917],{"class":2807}," 24",[1045,3919,3910],{"class":1154},[1045,3921,3922],{"class":2807}," 365",[1045,3924,1119],{"class":1055},[1045,3926,3927],{"class":1134}," \u002F\u002F 1 年\n",[1045,3929,3930,3933],{"class":1047,"line":1815},[1045,3931,3932],{"class":1055},"      }",[1045,3934,1198],{"class":1333},[1045,3936,3937,3939],{"class":1047,"line":1822},[1045,3938,1380],{"class":1055},[1045,3940,1198],{"class":1333},[1045,3942,3943],{"class":1047,"line":1827},[1045,3944,1189],{"class":1055},[1045,3946,3947,3949],{"class":1047,"line":1833},[1045,3948,1195],{"class":1055},[1045,3950,1198],{"class":1059},[1028,3952,3953],{"id":3953},"使用其它模块",[1024,3955,3956,3957,3960],{},"如果你的模块依赖其它模块，你可以使用 ",[1042,3958,3959],{},"moduleDependencies"," 选项指定它们：",[1036,3962,3964],{"className":1638,"code":3963,"language":1640,"meta":354,"style":354},"import { defineNuxtModule } from '@nuxt\u002Fkit'\n\nexport default defineNuxtModule({\n  meta: {\n    name: 'my-module',\n  },\n  moduleDependencies: {\n    '@nuxtjs\u002Ftailwindcss': {},\n  },\n})\n",[1042,3965,3966,3984,3988,4000,4009,4025,4029,4038,4054,4058],{"__ignoreMap":354},[1045,3967,3968,3970,3972,3974,3976,3978,3980,3982],{"class":1047,"line":1048},[1045,3969,1052],{"class":1051},[1045,3971,1056],{"class":1055},[1045,3973,1060],{"class":1059},[1045,3975,1063],{"class":1055},[1045,3977,1066],{"class":1051},[1045,3979,1070],{"class":1069},[1045,3981,1074],{"class":1073},[1045,3983,1077],{"class":1069},[1045,3985,3986],{"class":1047,"line":1080},[1045,3987,1084],{"emptyLinePlaceholder":1083},[1045,3989,3990,3992,3994,3996,3998],{"class":1047,"line":1087},[1045,3991,1090],{"class":1051},[1045,3993,1093],{"class":1051},[1045,3995,1060],{"class":1096},[1045,3997,1099],{"class":1059},[1045,3999,1102],{"class":1055},[1045,4001,4002,4005,4007],{"class":1047,"line":1105},[1045,4003,4004],{"class":1333},"  meta",[1045,4006,1364],{"class":1055},[1045,4008,1128],{"class":1055},[1045,4010,4011,4014,4016,4018,4021,4023],{"class":1047,"line":1131},[1045,4012,4013],{"class":1333},"    name",[1045,4015,1364],{"class":1055},[1045,4017,1070],{"class":1069},[1045,4019,4020],{"class":1073},"my-module",[1045,4022,1605],{"class":1069},[1045,4024,1375],{"class":1055},[1045,4026,4027],{"class":1047,"line":1138},[1045,4028,1189],{"class":1055},[1045,4030,4031,4034,4036],{"class":1047,"line":1161},[1045,4032,4033],{"class":1333},"  moduleDependencies",[1045,4035,1364],{"class":1055},[1045,4037,1128],{"class":1055},[1045,4039,4040,4043,4047,4049,4051],{"class":1047,"line":1186},[1045,4041,4042],{"class":1069},"    '",[1045,4044,4046],{"class":4045},"sSD0A","@nuxtjs\u002Ftailwindcss",[1045,4048,1605],{"class":1069},[1045,4050,1364],{"class":1055},[1045,4052,4053],{"class":1055}," {},\n",[1045,4055,4056],{"class":1047,"line":1192},[1045,4057,1189],{"class":1055},[1045,4059,4060,4062],{"class":1047,"line":1389},[1045,4061,1195],{"class":1055},[1045,4063,1198],{"class":1059},[1466,4065],{"to":265},[4067,4068,4069],"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 .syA7L, html code.shiki .syA7L{--shiki-light:#E53935;--shiki-default:#B392F0;--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 .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 .sXPRQ, html code.shiki .sXPRQ{--shiki-light:#39ADB5;--shiki-default:#F97583;--shiki-dark:#89DDFF}html pre.shiki code .si1Qm, html code.shiki .si1Qm{--shiki-light:#FF5370;--shiki-default:#79B8FF;--shiki-dark:#FF9CAC}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 .sOtFm, html code.shiki .sOtFm{--shiki-light:#E53935;--shiki-default:#E1E4E8;--shiki-dark:#F07178}html pre.shiki code .sV7Px, html code.shiki .sV7Px{--shiki-light:#9C3EDA;--shiki-default:#F97583;--shiki-dark:#C792EA}html pre.shiki code .sJTDI, html code.shiki .sJTDI{--shiki-light:#90A4AE;--shiki-default:#79B8FF;--shiki-dark:#BABED8}html pre.shiki code .sOUxV, html code.shiki .sOUxV{--shiki-light:#F76D47;--shiki-default:#79B8FF;--shiki-dark:#F78C6C}html pre.shiki code .sSD0A, html code.shiki .sSD0A{--shiki-light:#E53935;--shiki-default:#9ECBFF;--shiki-dark:#F07178}",{"title":354,"searchDepth":1087,"depth":1087,"links":4071},[4072,4073,4074,4075,4076,4079,4080,4081,4082],{"id":1030,"depth":1080,"text":1031},{"id":1221,"depth":1080,"text":1221},{"id":1476,"depth":1080,"text":1476},{"id":1628,"depth":1080,"text":1628},{"id":2081,"depth":1080,"text":2081,"children":4077},[4078],{"id":2619,"depth":1087,"text":2619},{"id":2992,"depth":1080,"text":2992},{"id":3169,"depth":1080,"text":3169},{"id":3569,"depth":1080,"text":3569},{"id":3953,"depth":1080,"text":3953},"md",{},null,{"title":262,"description":263},"docs\u002F3.guide\u002F4.modules\u002F3.recipes-basics","NhEblXXoswK09o3BhzJXGBtonGrex2_zClzG6SYJH08",1785179848551]