[{"data":1,"prerenderedAt":755},["ShallowReactive",2],{"page-\u002Fnuxt":3,"pieces-nuxt":724,"autour-\u002Fnuxt":740,"prerequis-\u002Fnuxt":743,"plan-nuxt":744},{"id":4,"title":5,"body":6,"description":703,"extension":704,"ligne":705,"meta":706,"motsCles":707,"navigation":303,"niveau":714,"path":715,"prerequis":716,"ressources":716,"seo":717,"sources":718,"stem":722,"__hash__":723},"docs\u002Fnuxt\u002Findex.md","Nuxt",{"type":7,"value":8,"toc":694},"minimark",[9,13,18,87,95,99,197,203,207,348,359,363,392,398,402,446,472,476,582,588,592,684,690],[10,11,12],"p",{},"Ce mémo résume les pièces de l'appartement Nuxt. Chaque section renvoie au chapitre qui l'explique en détail.",[14,15,17],"h2",{"id":16},"commandes","Commandes",[19,20,21,34],"table",{},[22,23,24],"thead",{},[25,26,27,31],"tr",{},[28,29,30],"th",{},"Commande",[28,32,33],{},"Effet",[35,36,37,49,63,77],"tbody",{},[25,38,39,46],{},[40,41,42],"td",{},[43,44,45],"code",{},"npm create nuxt@latest mon-site",[40,47,48],{},"Crée un projet.",[25,50,51,56],{},[40,52,53],{},[43,54,55],{},"npm run dev",[40,57,58,59,62],{},"Lance le serveur de développement sur ",[43,60,61],{},"http:\u002F\u002Flocalhost:3000",".",[25,64,65,70],{},[40,66,67],{},[43,68,69],{},"npm run build",[40,71,72,73,76],{},"Prépare le site pour la mise en ligne (dossier ",[43,74,75],{},".output",").",[25,78,79,84],{},[40,80,81],{},[43,82,83],{},"npx nuxt generate",[40,85,86],{},"Génère un site entièrement statique.",[10,88,89,90,62],{},"Détails : ",[91,92,94],"a",{"href":93},"\u002Fnuxt\u002Fintroduction","Introduction à Nuxt",[14,96,98],{"id":97},"où-ranger-quoi","Où ranger quoi",[19,100,101,111],{},[22,102,103],{},[25,104,105,108],{},[28,106,107],{},"Dossier",[28,109,110],{},"Contenu",[35,112,113,123,133,147,157,170,187],{},[25,114,115,120],{},[40,116,117],{},[43,118,119],{},"app\u002Fpages\u002F",[40,121,122],{},"Les pages : un fichier, une adresse.",[25,124,125,130],{},[40,126,127],{},[43,128,129],{},"app\u002Fcomponents\u002F",[40,131,132],{},"Les composants, importés automatiquement.",[25,134,135,140],{},[40,136,137],{},[43,138,139],{},"app\u002Fcomposables\u002F",[40,141,142,143,146],{},"Les fonctions ",[43,144,145],{},"useXxx"," réutilisables.",[25,148,149,154],{},[40,150,151],{},[43,152,153],{},"app\u002Flayouts\u002F",[40,155,156],{},"Les gabarits communs (en-tête, pied de page).",[25,158,159,164],{},[40,160,161],{},[43,162,163],{},"server\u002Fapi\u002F",[40,165,166,167,62],{},"Les routes d'API, préfixées par ",[43,168,169],{},"\u002Fapi",[25,171,172,177],{},[40,173,174],{},[43,175,176],{},"shared\u002F",[40,178,179,180,183,184,62],{},"Le code commun à ",[43,181,182],{},"app\u002F"," et ",[43,185,186],{},"server\u002F",[25,188,189,194],{},[40,190,191],{},[43,192,193],{},"public\u002F",[40,195,196],{},"Les fichiers servis tels quels.",[10,198,89,199,62],{},[91,200,202],{"href":201},"\u002Fnuxt\u002Fstructure","La structure d'un projet",[14,204,206],{"id":205},"pages-et-navigation","Pages et navigation",[208,209,214],"pre",{"className":210,"code":211,"language":212,"meta":213,"style":213},"language-vue shiki shiki-themes github-light-default github-dark-default github-dark-default","\u003Cscript setup lang=\"ts\">\nconst route = useRoute()            \u002F\u002F route.params.id dans pages\u002Frecettes\u002F[id].vue\ndefinePageMeta({ layout: 'admin' }) \u002F\u002F choisir un gabarit\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CNuxtLink to=\"\u002Frecettes\">Recettes\u003C\u002FNuxtLink>\n\u003C\u002Ftemplate>\n","vue","",[43,215,216,246,270,288,298,305,315,339],{"__ignoreMap":213},[217,218,221,225,229,233,236,239,243],"span",{"class":219,"line":220},"line",1,[217,222,224],{"class":223},"scfrF","\u003C",[217,226,228],{"class":227},"s5JFL","script",[217,230,232],{"class":231},"s5iOY"," setup",[217,234,235],{"class":231}," lang",[217,237,238],{"class":223},"=",[217,240,242],{"class":241},"shWOn","\"ts\"",[217,244,245],{"class":223},">\n",[217,247,249,253,256,259,263,266],{"class":219,"line":248},2,[217,250,252],{"class":251},"sOnC1","const",[217,254,255],{"class":231}," route",[217,257,258],{"class":251}," =",[217,260,262],{"class":261},"syCW7"," useRoute",[217,264,265],{"class":223},"()            ",[217,267,269],{"class":268},"sd6ml","\u002F\u002F route.params.id dans pages\u002Frecettes\u002F[id].vue\n",[217,271,273,276,279,282,285],{"class":219,"line":272},3,[217,274,275],{"class":261},"definePageMeta",[217,277,278],{"class":223},"({ layout: ",[217,280,281],{"class":241},"'admin'",[217,283,284],{"class":223}," }) ",[217,286,287],{"class":268},"\u002F\u002F choisir un gabarit\n",[217,289,291,294,296],{"class":219,"line":290},4,[217,292,293],{"class":223},"\u003C\u002F",[217,295,228],{"class":227},[217,297,245],{"class":223},[217,299,301],{"class":219,"line":300},5,[217,302,304],{"emptyLinePlaceholder":303},true,"\n",[217,306,308,310,313],{"class":219,"line":307},6,[217,309,224],{"class":223},[217,311,312],{"class":227},"template",[217,314,245],{"class":223},[217,316,318,321,324,327,329,332,335,337],{"class":219,"line":317},7,[217,319,320],{"class":223},"  \u003C",[217,322,323],{"class":227},"NuxtLink",[217,325,326],{"class":231}," to",[217,328,238],{"class":223},[217,330,331],{"class":241},"\"\u002Frecettes\"",[217,333,334],{"class":223},">Recettes\u003C\u002F",[217,336,323],{"class":227},[217,338,245],{"class":223},[217,340,342,344,346],{"class":219,"line":341},8,[217,343,293],{"class":223},[217,345,312],{"class":227},[217,347,245],{"class":223},[10,349,350,351,354,355,62],{},"Depuis le code : ",[43,352,353],{},"await navigateTo('\u002Frecettes')",". Détails : ",[91,356,358],{"href":357},"\u002Fnuxt\u002Fpages-et-routage","Pages et routage",[14,360,362],{"id":361},"composants","Composants",[364,365,366,376,382],"ul",{},[367,368,369,372,373,62],"li",{},[43,370,371],{},"app\u002Fcomponents\u002Frecette\u002FCarte.vue"," s'utilise avec ",[43,374,375],{},"\u003CRecetteCarte \u002F>",[367,377,378,381],{},[43,379,380],{},"\u003CLazyRecetteCarte \u002F>"," charge le composant à la demande.",[367,383,384,387,388,391],{},[43,385,386],{},"Nom.client.vue"," ou ",[43,389,390],{},"\u003CClientOnly>"," : seulement dans le navigateur.",[10,393,89,394,62],{},[91,395,397],{"href":396},"\u002Fnuxt\u002Fcomposants","Les composants",[14,399,401],{"id":400},"données","Données",[19,403,404,414],{},[22,405,406],{},[25,407,408,411],{},[28,409,410],{},"Outil",[28,412,413],{},"Quand",[35,415,416,426,436],{},[25,417,418,423],{},[40,419,420],{},[43,421,422],{},"useFetch('\u002Fapi\u002F...')",[40,424,425],{},"Charger une adresse pendant l'affichage d'une page.",[25,427,428,433],{},[40,429,430],{},[43,431,432],{},"useAsyncData('cle', () => ...)",[40,434,435],{},"Charger depuis une autre source (Supabase...).",[25,437,438,443],{},[40,439,440],{},[43,441,442],{},"$fetch('\u002Fapi\u002F...', { method: 'POST', body })",[40,444,445],{},"Une action de l'utilisateur (clic, formulaire).",[10,447,448,183,451,454,455,458,459,458,462,183,465,354,468,62],{},[43,449,450],{},"useFetch",[43,452,453],{},"useAsyncData"," renvoient ",[43,456,457],{},"data",", ",[43,460,461],{},"status",[43,463,464],{},"error",[43,466,467],{},"refresh",[91,469,471],{"href":470},"\u002Fnuxt\u002Frecuperer-des-donnees","Récupérer des données",[14,473,475],{"id":474},"routes-api","Routes API",[208,477,482],{"className":478,"code":479,"filename":480,"language":481,"meta":213,"style":213},"language-ts shiki shiki-themes github-light-default github-dark-default github-dark-default","export default defineEventHandler((event) => {\n  const id = getRouterParam(event, 'id')\n  \u002F\u002F getQuery(event), await readBody(event), useRuntimeConfig(event)\n  if (!id) throw createError({ statusCode: 400, statusMessage: 'Identifiant manquant' })\n  return { id }\n})\n","server\u002Fapi\u002Frecettes\u002F[id].get.ts","ts",[43,483,484,505,527,532,567,575],{"__ignoreMap":213},[217,485,486,489,492,495,499,502],{"class":219,"line":220},[217,487,488],{"class":251},"export",[217,490,491],{"class":251}," default",[217,493,494],{"class":261}," defineEventHandler",[217,496,498],{"class":497},"sIXEE","((event) ",[217,500,501],{"class":251},"=>",[217,503,504],{"class":223}," {\n",[217,506,507,510,513,515,518,521,524],{"class":219,"line":248},[217,508,509],{"class":251},"  const",[217,511,512],{"class":231}," id",[217,514,258],{"class":251},[217,516,517],{"class":261}," getRouterParam",[217,519,520],{"class":223},"(event, ",[217,522,523],{"class":241},"'id'",[217,525,526],{"class":223},")\n",[217,528,529],{"class":219,"line":272},[217,530,531],{"class":268},"  \u002F\u002F getQuery(event), await readBody(event), useRuntimeConfig(event)\n",[217,533,534,537,540,543,546,549,552,555,558,561,564],{"class":219,"line":290},[217,535,536],{"class":251},"  if",[217,538,539],{"class":223}," (",[217,541,542],{"class":251},"!",[217,544,545],{"class":223},"id) ",[217,547,548],{"class":251},"throw",[217,550,551],{"class":261}," createError",[217,553,554],{"class":223},"({ statusCode: ",[217,556,557],{"class":231},"400",[217,559,560],{"class":223},", statusMessage: ",[217,562,563],{"class":241},"'Identifiant manquant'",[217,565,566],{"class":223}," })\n",[217,568,569,572],{"class":219,"line":300},[217,570,571],{"class":251},"  return",[217,573,574],{"class":223}," { id }\n",[217,576,577,580],{"class":219,"line":307},[217,578,579],{"class":223},"}",[217,581,526],{"class":497},[10,583,89,584,62],{},[91,585,587],{"href":586},"\u002Fnuxt\u002Froutes-api","Les routes API",[14,589,591],{"id":590},"modes-de-rendu","Modes de rendu",[208,593,596],{"className":478,"code":594,"filename":595,"language":481,"meta":213,"style":213},"export default defineNuxtConfig({\n  \u002F\u002F ssr: false,                      \u002F\u002F tout dans le navigateur\n  routeRules: {\n    '\u002F': { prerender: true },         \u002F\u002F au build\n    '\u002Frecettes\u002F**': { swr: 3600 },    \u002F\u002F au serveur, en cache une heure\n    '\u002Fadmin\u002F**': { ssr: false }       \u002F\u002F dans le navigateur\n  }\n})\n","nuxt.config.ts",[43,597,598,610,618,623,640,657,674,679],{"__ignoreMap":213},[217,599,600,602,604,607],{"class":219,"line":220},[217,601,488],{"class":251},[217,603,491],{"class":251},[217,605,606],{"class":261}," defineNuxtConfig",[217,608,609],{"class":497},"({\n",[217,611,612,615],{"class":219,"line":248},[217,613,614],{"class":268},"  \u002F\u002F ssr: false,",[217,616,617],{"class":268},"                      \u002F\u002F tout dans le navigateur\n",[217,619,620],{"class":219,"line":272},[217,621,622],{"class":223},"  routeRules: {\n",[217,624,625,628,631,634,637],{"class":219,"line":290},[217,626,627],{"class":241},"    '\u002F'",[217,629,630],{"class":223},": { prerender: ",[217,632,633],{"class":231},"true",[217,635,636],{"class":223}," },         ",[217,638,639],{"class":268},"\u002F\u002F au build\n",[217,641,642,645,648,651,654],{"class":219,"line":300},[217,643,644],{"class":241},"    '\u002Frecettes\u002F**'",[217,646,647],{"class":223},": { swr: ",[217,649,650],{"class":231},"3600",[217,652,653],{"class":223}," },    ",[217,655,656],{"class":268},"\u002F\u002F au serveur, en cache une heure\n",[217,658,659,662,665,668,671],{"class":219,"line":307},[217,660,661],{"class":241},"    '\u002Fadmin\u002F**'",[217,663,664],{"class":223},": { ssr: ",[217,666,667],{"class":231},"false",[217,669,670],{"class":223}," }       ",[217,672,673],{"class":268},"\u002F\u002F dans le navigateur\n",[217,675,676],{"class":219,"line":317},[217,677,678],{"class":223},"  }\n",[217,680,681],{"class":219,"line":341},[217,682,683],{"class":497},"})\n",[10,685,89,686,62],{},[91,687,689],{"href":688},"\u002Fnuxt\u002Fmodes-de-rendu","Les modes de rendu",[691,692,693],"style",{},"html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .s5JFL, html code.shiki .s5JFL{--shiki-light:#116329;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .sd6ml, html code.shiki .sd6ml{--shiki-light:#6E7781;--shiki-default:#8B949E;--shiki-dark:#8B949E}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 .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}",{"title":213,"searchDepth":248,"depth":272,"links":695},[696,697,698,699,700,701,702],{"id":16,"depth":248,"text":17},{"id":97,"depth":248,"text":98},{"id":205,"depth":248,"text":206},{"id":361,"depth":248,"text":362},{"id":400,"depth":248,"text":401},{"id":474,"depth":248,"text":475},{"id":590,"depth":248,"text":591},"Le mémo de Nuxt 4 : commandes, dossiers, pages, données, routes API et modes de rendu.","md","nuxt",{},[708,709,710,595,450,711,712,713,323,275],"mémo","aide-mémoire","Nuxt 4","$fetch","server\u002Fapi","routeRules","memo","\u002Fnuxt",null,{"title":5,"description":703},[719],{"nom":720,"url":721},"Documentation de Nuxt (en anglais)","https:\u002F\u002Fnuxt.com\u002Fdocs\u002F4.x\u002Fgetting-started\u002Fintroduction","nuxt\u002Findex","m1PKzP6U7rRpNmXGuXmY8uhOUlOW55sf-NK0cfnIOPg",[725,727,729,731,733,735,737,739],{"path":93,"title":94,"stem":726},"nuxt\u002F01.introduction",{"path":201,"title":202,"stem":728},"nuxt\u002F02.structure",{"path":357,"title":358,"stem":730},"nuxt\u002F03.pages-et-routage",{"path":396,"title":397,"stem":732},"nuxt\u002F04.composants",{"path":470,"title":471,"stem":734},"nuxt\u002F05.recuperer-des-donnees",{"path":586,"title":587,"stem":736},"nuxt\u002F06.routes-api",{"path":688,"title":689,"stem":738},"nuxt\u002F07.modes-de-rendu",{"path":715,"title":5,"stem":722},[716,741],{"title":94,"path":93,"stem":726,"description":742,"children":-1},"Ce que Nuxt ajoute à Vue, quand l'utiliser, et comment créer ton premier projet.",[],[745,747,748,749,750,752,753,754],{"path":93,"title":94,"niveau":746,"stem":726},"debutant",{"path":201,"title":202,"niveau":746,"stem":728},{"path":357,"title":358,"niveau":746,"stem":730},{"path":396,"title":397,"niveau":746,"stem":732},{"path":470,"title":471,"niveau":751,"stem":734},"intermediaire",{"path":586,"title":587,"niveau":751,"stem":736},{"path":688,"title":689,"niveau":751,"stem":738},{"path":715,"title":5,"niveau":714,"stem":722},1794583427548]