[{"data":1,"prerenderedAt":379},["ShallowReactive",2],{"navigation_docs":3,"rule-content-\u002Fnuxt\u002Frules\u002Fmodule\u002Frequire-meta":44},[4,8,12,16,20,24,28,32,36,40],{"title":5,"path":6,"stem":7},"CLI","\u002Fcli","1.cli",{"title":9,"path":10,"stem":11},"Nuxt","\u002Fnuxt","2.nuxt",{"title":13,"path":14,"stem":15},"Vue","\u002Fvue","3.vue",{"title":17,"path":18,"stem":19},"Vite","\u002Fvite","4.vite",{"title":21,"path":22,"stem":23},"Nitro","\u002Fnitro","5.nitro",{"title":25,"path":26,"stem":27},"TypeScript","\u002Ftypescript","6.typescript",{"title":29,"path":30,"stem":31},"shadcn","\u002Fshadcn","7.shadcn",{"title":33,"path":34,"stem":35},"Package","\u002Fpackage","8.package",{"title":37,"path":38,"stem":39},"Extending Doctor","\u002Fextending","9.extending",{"title":41,"path":42,"stem":43},"Pinia","\u002Fpinia","9.pinia",{"id":45,"title":46,"body":47,"category":53,"description":367,"diagnosticCodes":368,"docsUrl":55,"extension":369,"fix":56,"framework":370,"meta":371,"navigation":372,"pack":57,"path":374,"recommendedReplacement":117,"ruleId":58,"seo":375,"severity":59,"source":60,"sourceUrl":61,"stem":376,"why":377,"__hash__":378},"rules\u002Fnuxt\u002Frules\u002Fmodule\u002Frequire-meta.md","Declare Nuxt module meta",{"type":48,"value":49,"toc":358},"minimark",[50,62,67,99,103,111,115,118,122,134,138,143,146,214,217,354],[51,52],"rule-metadata",{"category":53,"diagnosticCodes":54,"docsUrl":55,"fix":56,"pack":57,"ruleId":58,"severity":59,"source":60,"sourceUrl":61},"modules","NUXT0081","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fguide\u002Fmodules\u002Fmodule-anatomy#define-your-module","suggestion","vite-doctor\u002Fnuxt","nuxt\u002Fmodule\u002Frequire-meta","warn","src\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fmodule-require-meta.ts","https:\u002F\u002Fgithub.com\u002Fonmax\u002Fvite-doctor\u002Fblob\u002Fmain\u002Fsrc\u002Frule-packs\u002Fnuxt\u002Frules\u002Fnuxt\u002Fmodule-require-meta.ts",[63,64,66],"h2",{"id":65},"run-this-rule","Run this rule",[68,69,74],"pre",{"className":70,"code":71,"language":72,"meta":73,"style":73},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm nuxt doctor --rules nuxt\u002Fmodule\u002Frequire-meta\n","bash","",[75,76,77],"code",{"__ignoreMap":73},[78,79,82,86,90,93,96],"span",{"class":80,"line":81},"line",1,[78,83,85],{"class":84},"sBMFI","pnpm",[78,87,89],{"class":88},"sfazB"," nuxt",[78,91,92],{"class":88}," doctor",[78,94,95],{"class":88}," --rules",[78,97,98],{"class":88}," nuxt\u002Fmodule\u002Frequire-meta\n",[63,100,102],{"id":101},"why-it-matters","Why it matters",[104,105,106,107,110],"p",{},"@nuxt\u002Fkit identifies a module by meta.name: it installs the module only once and ",[75,108,109],{},"hasNuxtModule()"," looks it up by name. meta.configKey is the nuxt.config key that holds the module options and falls back to meta.name, so a scoped package name makes options awkward to set. meta.compatibility lets @nuxt\u002Fkit check the installed Nuxt version before setup and disable the module with a clear message. Doctor only asks for configKey when the module accepts options and meta.name is not already a usable key.",[63,112,114],{"id":113},"recommended-fix","Recommended fix",[104,116,117],{},"Declare meta.name with the package name, a camelCase meta.configKey, and meta.compatibility with the supported Nuxt range.",[63,119,121],{"id":120},"useful-links","Useful links",[123,124,125],"ul",{},[126,127,128],"li",{},[129,130,133],"a",{"href":55,"rel":131},[132],"nofollow","Rule reference",[63,135,137],{"id":136},"example","Example",[139,140,142],"h3",{"id":141},"declare-module-meta","Declare module meta",[104,144,145],{},"Before",[68,147,151],{"className":148,"code":149,"language":150,"meta":73,"style":73},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtModule({\n  setup(options, nuxt) { \u002F* ... *\u002F },\n})\n","ts",[75,152,153,174,205],{"__ignoreMap":73},[78,154,155,159,162,166,170],{"class":80,"line":81},[78,156,158],{"class":157},"s7zQu","export",[78,160,161],{"class":157}," default",[78,163,165],{"class":164},"s2Zo4"," defineNuxtModule",[78,167,169],{"class":168},"sTEyZ","(",[78,171,173],{"class":172},"sMK4o","{\n",[78,175,177,181,183,187,190,192,195,198,202],{"class":80,"line":176},2,[78,178,180],{"class":179},"swJcz","  setup",[78,182,169],{"class":172},[78,184,186],{"class":185},"sHdIc","options",[78,188,189],{"class":172},",",[78,191,89],{"class":185},[78,193,194],{"class":172},")",[78,196,197],{"class":172}," {",[78,199,201],{"class":200},"sHwdD"," \u002F* ... *\u002F",[78,203,204],{"class":172}," },\n",[78,206,208,211],{"class":80,"line":207},3,[78,209,210],{"class":172},"}",[78,212,213],{"class":168},")\n",[104,215,216],{},"After",[68,218,220],{"className":148,"code":219,"language":150,"meta":73,"style":73},"export default defineNuxtModule\u003CModuleOptions>({\n  meta: { name: '@acme\u002Fnuxt-analytics', configKey: 'analytics', compatibility: { nuxt: '>=4.0.0' } },\n  defaults: { enabled: true },\n  setup(options, nuxt) { \u002F* ... *\u002F },\n})\n",[75,221,222,243,306,326,347],{"__ignoreMap":73},[78,223,224,226,228,230,233,236,239,241],{"class":80,"line":81},[78,225,158],{"class":157},[78,227,161],{"class":157},[78,229,165],{"class":164},[78,231,232],{"class":172},"\u003C",[78,234,235],{"class":84},"ModuleOptions",[78,237,238],{"class":172},">",[78,240,169],{"class":168},[78,242,173],{"class":172},[78,244,245,248,251,253,256,258,261,264,267,269,272,274,276,279,281,283,286,288,290,292,294,296,299,301,304],{"class":80,"line":176},[78,246,247],{"class":179},"  meta",[78,249,250],{"class":172},":",[78,252,197],{"class":172},[78,254,255],{"class":179}," name",[78,257,250],{"class":172},[78,259,260],{"class":172}," '",[78,262,263],{"class":88},"@acme\u002Fnuxt-analytics",[78,265,266],{"class":172},"'",[78,268,189],{"class":172},[78,270,271],{"class":179}," configKey",[78,273,250],{"class":172},[78,275,260],{"class":172},[78,277,278],{"class":88},"analytics",[78,280,266],{"class":172},[78,282,189],{"class":172},[78,284,285],{"class":179}," compatibility",[78,287,250],{"class":172},[78,289,197],{"class":172},[78,291,89],{"class":179},[78,293,250],{"class":172},[78,295,260],{"class":172},[78,297,298],{"class":88},">=4.0.0",[78,300,266],{"class":172},[78,302,303],{"class":172}," }",[78,305,204],{"class":172},[78,307,308,311,313,315,318,320,324],{"class":80,"line":207},[78,309,310],{"class":179},"  defaults",[78,312,250],{"class":172},[78,314,197],{"class":172},[78,316,317],{"class":179}," enabled",[78,319,250],{"class":172},[78,321,323],{"class":322},"sfNiH"," true",[78,325,204],{"class":172},[78,327,329,331,333,335,337,339,341,343,345],{"class":80,"line":328},4,[78,330,180],{"class":179},[78,332,169],{"class":172},[78,334,186],{"class":185},[78,336,189],{"class":172},[78,338,89],{"class":185},[78,340,194],{"class":172},[78,342,197],{"class":172},[78,344,201],{"class":200},[78,346,204],{"class":172},[78,348,350,352],{"class":80,"line":349},5,[78,351,210],{"class":172},[78,353,213],{"class":168},[355,356,357],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":73,"searchDepth":176,"depth":176,"links":359},[360,361,362,363,364],{"id":65,"depth":176,"text":66},{"id":101,"depth":176,"text":102},{"id":113,"depth":176,"text":114},{"id":120,"depth":176,"text":121},{"id":136,"depth":176,"text":137,"children":365},[366],{"id":141,"depth":207,"text":142},"Finds the default-exported defineNuxtModule() of a Nuxt module package that does not declare meta.name, meta.configKey, or meta.compatibility.",[54],"md","nuxt",{},{"title":373},"Module meta","\u002Fnuxt\u002Frules\u002Fmodule\u002Frequire-meta",{"title":46,"description":367},"nuxt\u002Frules\u002Fmodule\u002Frequire-meta","@nuxt\u002Fkit identifies a module by meta.name: it installs the module only once and hasNuxtModule() looks it up by name. meta.configKey is the nuxt.config key that holds the module options and falls back to meta.name, so a scoped package name makes options awkward to set. meta.compatibility lets @nuxt\u002Fkit check the installed Nuxt version before setup and disable the module with a clear message. Doctor only asks for configKey when the module accepts options and meta.name is not already a usable key.","ebOTwJlzFQglRbtbHxfWQDLYqWH68n7UNk6u8oTZtkA",1791309474028]