-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathnuxt.config.ts
More file actions
528 lines (526 loc) · 34.7 KB
/
nuxt.config.ts
File metadata and controls
528 lines (526 loc) · 34.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
import { createResolver } from 'nuxt/kit'
import { parseMdc } from './helpers/mdc-parser.mjs'
const { resolve } = createResolver(import.meta.url)
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
modules: [
'@nuxt/ui',
'nuxt-content-twoslash',
'@nuxt/test-utils',
'@nuxt/content',
'@nuxt/image',
// '@nuxtjs/plausible',
'@nuxt/eslint',
'@nuxt/scripts',
// '@nuxtjs/turnstile',
'@vueuse/nuxt',
'nuxt-og-image',
'motion-v/nuxt',
'nuxt-llms',
'@nuxthub/core',
'nuxt-charts',
'nuxt-auth-utils',
'@nuxtjs/mcp-toolkit',
'@nuxt/hints'
],
$development: {
site: {
url: 'http://localhost:3000'
},
image: {
alias: {
'/gh/': 'https://raw.githubusercontent.com',
'/gh_avatar/': 'https://avatars.githubusercontent.com'
},
domains: [
'raw.githubusercontent.com',
'avatars.githubusercontent.com',
'nuxt.com'
]
}
},
$production: {
hub: {
kv: true
},
image: {
// ipx: {
// baseURL: 'https://ipx.nuxt.com'
// }
}
},
devtools: {
enabled: true
},
app: {
pageTransition: false,
layoutTransition: false
},
css: ['~/assets/css/main.css'],
colorMode: {
preference: 'dark'
},
content: {
build: {
markdown: {
highlight: {
theme: {
default: 'material-theme-lighter',
dark: 'material-theme-palenight'
},
langs: ['js', 'jsx', 'json', 'ts', 'tsx', 'vue', 'css', 'html', 'bash', 'md', 'mdc', 'yaml', 'sql', 'diff', 'ini']
}
}
}
},
mdc: {
highlight: {
noApiRoute: false
}
},
ui: {
theme: {
colors: ['primary', 'secondary', 'info', 'success', 'warning', 'error', 'important']
},
experimental: {
componentDetection: true
}
},
runtimeConfig: {
contactEmail: '',
github: {
token: ''
},
newsletter: {
secret: ''
},
openCollective: {
apiKey: ''
},
resend: {
apiKey: '',
audienceId: ''
}
},
routeRules: {
// Pre-render
'/': { prerender: true },
'/blog/rss.xml': { prerender: true },
'/sitemap.xml': { prerender: true },
'/404.html': { prerender: true },
'/docs/3.x/getting-started/introduction': { prerender: true },
'/docs/4.x/getting-started/introduction': { prerender: true },
'/docs/5.x/getting-started/introduction': { prerender: true },
'/modules': { prerender: true },
'/modules/**': { isr: 60 * 60 },
// API
'/api/v1/teams': { isr: 60 * 60 },
// Admin
'/admin': { ssr: false },
'/admin/**': { ssr: false },
// Main navigation
'/api/navigation.json': { prerender: true },
'/api/search.json': { prerender: true },
// Redirects
'/docs': { redirect: '/docs/getting-started/introduction', prerender: false },
'/docs/3.x': { redirect: '/docs/3.x/getting-started/introduction', prerender: false },
'/docs/4.x': { redirect: '/docs/4.x/getting-started/introduction', prerender: false },
'/docs/5.x': { redirect: '/docs/5.x/getting-started/introduction', prerender: false },
'/docs/getting-started': { redirect: '/docs/getting-started/introduction', prerender: false },
'/docs/3.x/getting-started': { redirect: '/docs/3.x/getting-started/introduction', prerender: false },
'/docs/4.x/getting-started': { redirect: '/docs/4.x/getting-started/introduction', prerender: false },
'/docs/5.x/getting-started': { redirect: '/docs/5.x/getting-started/introduction', prerender: false },
'/docs/guide/concepts': { redirect: '/docs/guide/concepts/auto-imports', prerender: false },
'/docs/3.x/guide/concepts': { redirect: '/docs/3.x/guide/concepts/auto-imports', prerender: false },
'/docs/4.x/guide/concepts': { redirect: '/docs/4.x/guide/concepts/auto-imports', prerender: false },
'/docs/5.x/guide/concepts': { redirect: '/docs/5.x/guide/concepts/auto-imports', prerender: false },
'/docs/guide/directory-structure': { redirect: '/docs/directory-structure', prerender: false },
'/docs/3.x/guide/directory-structure': { redirect: '/docs/3.x/directory-structure', prerender: false },
'/docs/4.x/guide/directory-structure': { redirect: '/docs/4.x/directory-structure', prerender: false },
'/docs/5.x/guide/directory-structure': { redirect: '/docs/5.x/directory-structure', prerender: false },
'/docs/guide/going-further': { redirect: '/docs/guide/going-further/experimental-features', prerender: false },
'/docs/3.x/guide/going-further': { redirect: '/docs/3.x/guide/going-further/experimental-features', prerender: false },
'/docs/4.x/guide/going-further': { redirect: '/docs/4.x/guide/going-further/experimental-features', prerender: false },
'/docs/5.x/guide/going-further': { redirect: '/docs/5.x/guide/going-further/experimental-features', prerender: false },
'/docs/guide/going-further/edge-release-channel': { redirect: '/docs/guide/going-further/nightly-release-channel', prerender: false },
'/docs/3.x/guide/going-further/edge-release-channel': { redirect: '/docs/3.x/guide/going-further/nightly-release-channel', prerender: false },
'/docs/4.x/guide/going-further/edge-release-channel': { redirect: '/docs/4.x/guide/going-further/nightly-release-channel', prerender: false },
'/docs/5.x/guide/going-further/edge-release-channel': { redirect: '/docs/5.x/guide/going-further/nightly-release-channel', prerender: false },
'/docs/bridge': { redirect: '/docs/bridge/overview', prerender: false },
'/docs/3.x/bridge': { redirect: '/docs/3.x/bridge/overview', prerender: false },
'/docs/4.x/bridge': { redirect: '/docs/4.x/bridge/overview', prerender: false },
'/docs/5.x/bridge': { redirect: '/docs/5.x/bridge/overview', prerender: false },
'/docs/migration': { redirect: '/docs/migration/overview', prerender: false },
'/docs/3.x/migration': { redirect: '/docs/3.x/migration/overview', prerender: false },
'/docs/4.x/migration': { redirect: '/docs/4.x/migration/overview', prerender: false },
'/docs/5.x/migration': { redirect: '/docs/5.x/migration/overview', prerender: false },
'/docs/api/components': { redirect: '/docs/api/components/client-only', prerender: false },
'/docs/3.x/api/components': { redirect: '/docs/3.x/api/components/client-only', prerender: false },
'/docs/4.x/api/components': { redirect: '/docs/4.x/api/components/client-only', prerender: false },
'/docs/5.x/api/components': { redirect: '/docs/5.x/api/components/client-only', prerender: false },
'/docs/api/composables': { redirect: '/docs/api/composables/use-app-config', prerender: false },
'/docs/3.x/api/composables': { redirect: '/docs/3.x/api/composables/use-app-config', prerender: false },
'/docs/4.x/api/composables': { redirect: '/docs/4.x/api/composables/use-app-config', prerender: false },
'/docs/5.x/api/composables': { redirect: '/docs/5.x/api/composables/use-app-config', prerender: false },
'/docs/api/utils': { redirect: '/docs/api/utils/dollarfetch', prerender: false },
'/docs/3.x/api/utils': { redirect: '/docs/3.x/api/utils/dollarfetch', prerender: false },
'/docs/4.x/api/utils': { redirect: '/docs/4.x/api/utils/dollarfetch', prerender: false },
'/docs/5.x/api/utils': { redirect: '/docs/5.x/api/utils/dollarfetch', prerender: false },
'/docs/api/kit': { redirect: '/docs/api/kit/modules', prerender: false },
'/docs/3.x/api/kit': { redirect: '/docs/3.x/api/kit/modules', prerender: false },
'/docs/4.x/api/kit': { redirect: '/docs/4.x/api/kit/modules', prerender: false },
'/docs/5.x/api/kit': { redirect: '/docs/5.x/api/kit/modules', prerender: false },
'/docs/api/commands': { redirect: '/docs/api/commands/dev', prerender: false },
'/docs/3.x/api/commands': { redirect: '/docs/3.x/api/commands/dev', prerender: false },
'/docs/4.x/api/commands': { redirect: '/docs/4.x/api/commands/dev', prerender: false },
'/docs/5.x/api/commands': { redirect: '/docs/5.x/api/commands/dev', prerender: false },
'/docs/api/advanced': { redirect: '/docs/api/advanced/hooks', prerender: false },
'/docs/3.x/api/advanced': { redirect: '/docs/3.x/api/advanced/hooks', prerender: false },
'/docs/4.x/api/advanced': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/5.x/api/advanced': { redirect: '/docs/5.x/api/advanced/hooks', prerender: false },
'/docs/api/configuration/nuxt-config': { redirect: '/docs/api/nuxt-config', prerender: false },
'/docs/3.x/api/configuration/nuxt-config': { redirect: '/docs/3.x/api/nuxt-config', prerender: false },
'/docs/4.x/api/configuration/nuxt-config': { redirect: '/docs/4.x/api/nuxt-config', prerender: false },
'/docs/5.x/api/configuration/nuxt-config': { redirect: '/docs/5.x/api/nuxt-config', prerender: false },
'/docs/examples': { redirect: '/docs/examples/hello-world', prerender: false },
'/docs/3.x/examples': { redirect: '/docs/3.x/examples/hello-world', prerender: false },
'/docs/4.x/examples': { redirect: '/docs/4.x/examples/hello-world', prerender: false },
'/docs/5.x/examples': { redirect: '/docs/5.x/examples/hello-world', prerender: false },
'/docs/examples/features': { redirect: '/docs/examples/features/auto-imports', prerender: false },
'/docs/3.x/examples/features': { redirect: '/docs/3.x/examples/features/auto-imports', prerender: false },
'/docs/4.x/examples/features': { redirect: '/docs/4.x/examples/features/auto-imports', prerender: false },
'/docs/5.x/examples/features': { redirect: '/docs/5.x/examples/features/auto-imports', prerender: false },
'/docs/examples/routing': { redirect: '/docs/examples/routing/middleware', prerender: false },
'/docs/3.x/examples/routing': { redirect: '/docs/3.x/examples/routing/middleware', prerender: false },
'/docs/4.x/examples/routing': { redirect: '/docs/4.x/examples/routing/middleware', prerender: false },
'/docs/5.x/examples/routing': { redirect: '/docs/5.x/examples/routing/middleware', prerender: false },
'/docs/examples/advanced': { redirect: '/docs/examples/advanced/config-extends', prerender: false },
'/docs/3.x/examples/advanced': { redirect: '/docs/3.x/examples/advanced/config-extends', prerender: false },
'/docs/4.x/examples/advanced': { redirect: '/docs/4.x/examples/advanced/config-extends', prerender: false },
'/docs/5.x/examples/advanced': { redirect: '/docs/5.x/examples/advanced/config-extends', prerender: false },
'/docs/examples/experimental': { redirect: '/docs/examples/experimental/wasm', prerender: false },
'/docs/3.x/examples/experimental': { redirect: '/docs/3.x/examples/experimental/wasm', prerender: false },
'/docs/4.x/examples/experimental': { redirect: '/docs/4.x/examples/experimental/wasm', prerender: false },
'/docs/5.x/examples/experimental': { redirect: '/docs/5.x/examples/experimental/wasm', prerender: false },
'/docs/community': { redirect: '/docs/community/getting-help', prerender: false },
'/docs/3.x/community': { redirect: '/docs/3.x/community/getting-help', prerender: false },
'/docs/4.x/community': { redirect: '/docs/4.x/community/getting-help', prerender: false },
'/docs/5.x/community': { redirect: '/docs/5.x/community/getting-help', prerender: false },
'/docs/community/nuxt-community': { redirect: '/docs/community/getting-help', prerender: false },
'/docs/3.x/community/nuxt-community': { redirect: '/docs/3.x/community/getting-help', prerender: false },
'/docs/4.x/community/nuxt-community': { redirect: '/docs/4.x/community/getting-help', prerender: false },
'/docs/5.x/community/nuxt-community': { redirect: '/docs/5.x/community/getting-help', prerender: false },
'/docs/guide/recipes': { redirect: '/docs/guide/recipes/custom-routing', prerender: false },
'/docs/3.x/guide/recipes': { redirect: '/docs/3.x/guide/recipes/custom-routing', prerender: false },
'/docs/4.x/guide/recipes': { redirect: '/docs/4.x/guide/recipes/custom-routing', prerender: false },
'/docs/5.x/guide/recipes': { redirect: '/docs/5.x/guide/recipes/custom-routing', prerender: false },
'/docs/guide/best-practices': { redirect: '/docs/guide/best-practices/performance', prerender: false },
'/docs/3.x/guide/best-practices': { redirect: '/docs/3.x/guide/best-practices/performance', prerender: false },
'/docs/4.x/guide/best-practices': { redirect: '/docs/4.x/guide/best-practices/performance', prerender: false },
'/docs/5.x/guide/best-practices': { redirect: '/docs/5.x/guide/best-practices/performance', prerender: false },
'/docs/guide/concepts/modules': { redirect: '/docs/guide/modules/getting-started', prerender: false },
'/docs/3.x/guide/concepts/modules': { redirect: '/docs/3.x/guide/modules/getting-started', prerender: false },
'/docs/4.x/guide/concepts/modules': { redirect: '/docs/4.x/guide/modules/getting-started', prerender: false },
'/docs/5.x/guide/concepts/modules': { redirect: '/docs/5.x/guide/modules/getting-started', prerender: false },
'/docs/guide/going-further/custom-routing': { redirect: '/docs/guide/recipes/custom-routing', prerender: false },
'/docs/3.x/guide/going-further/custom-routing': { redirect: '/docs/3.x/guide/recipes/custom-routing', prerender: false },
'/docs/4.x/guide/going-further/custom-routing': { redirect: '/docs/4.x/guide/recipes/custom-routing', prerender: false },
'/docs/5.x/guide/going-further/custom-routing': { redirect: '/docs/5.x/guide/recipes/custom-routing', prerender: false },
// new directory structure
'/docs/3.x/directory-structure/app/middleware': { redirect: '/docs/3.x/directory-structure/middleware', prerender: false },
'/docs/4.x/directory-structure/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/5.x/directory-structure/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/3.x/guide/directory-structure/**': { redirect: '/docs/3.x/directory-structure', prerender: false },
'/docs/3.x/guide/directory-structure/app/assets': { redirect: '/docs/3.x/directory-structure/assets', prerender: false },
'/docs/4.x/guide/directory-structure/assets': { redirect: '/docs/4.x/directory-structure/app/assets', prerender: false },
'/docs/5.x/guide/directory-structure/assets': { redirect: '/docs/4.x/directory-structure/app/assets', prerender: false },
'/docs/3.x/guide/directory-structure/app/components': { redirect: '/docs/3.x/directory-structure/components', prerender: false },
'/docs/4.x/guide/directory-structure/components': { redirect: '/docs/4.x/directory-structure/app/components', prerender: false },
'/docs/5.x/guide/directory-structure/components': { redirect: '/docs/4.x/directory-structure/app/components', prerender: false },
'/docs/3.x/guide/directory-structure/app/composables': { redirect: '/docs/3.x/directory-structure/composables', prerender: false },
'/docs/4.x/guide/directory-structure/composables': { redirect: '/docs/4.x/directory-structure/app/composables', prerender: false },
'/docs/5.x/guide/directory-structure/composables': { redirect: '/docs/4.x/directory-structure/app/composables', prerender: false },
'/docs/3.x/guide/directory-structure/app/layouts': { redirect: '/docs/3.x/directory-structure/layouts', prerender: false },
'/docs/4.x/guide/directory-structure/layouts': { redirect: '/docs/4.x/directory-structure/app/layouts', prerender: false },
'/docs/5.x/guide/directory-structure/layouts': { redirect: '/docs/4.x/directory-structure/app/layouts', prerender: false },
'/docs/3.x/guide/directory-structure/app/middleware': { redirect: '/docs/3.x/directory-structure/middleware', prerender: false },
'/docs/4.x/guide/directory-structure/middleware': { redirect: '/docs/4.x/directory-structure/app/middleware', prerender: false },
'/docs/5.x/guide/directory-structure/middleware': { redirect: '/docs/4.x/directory-structure/app/middleware', prerender: false },
'/docs/3.x/guide/directory-structure/app/pages': { redirect: '/docs/3.x/directory-structure/pages', prerender: false },
'/docs/4.x/guide/directory-structure/pages': { redirect: '/docs/4.x/directory-structure/app/pages', prerender: false },
'/docs/5.x/guide/directory-structure/pages': { redirect: '/docs/4.x/directory-structure/app/pages', prerender: false },
'/docs/3.x/guide/directory-structure/app/plugins': { redirect: '/docs/3.x/directory-structure/plugins', prerender: false },
'/docs/4.x/guide/directory-structure/plugins': { redirect: '/docs/4.x/directory-structure/app/plugins', prerender: false },
'/docs/5.x/guide/directory-structure/plugins': { redirect: '/docs/4.x/directory-structure/app/plugins', prerender: false },
'/docs/3.x/guide/directory-structure/app/utils': { redirect: '/docs/3.x/directory-structure/utils', prerender: false },
'/docs/4.x/guide/directory-structure/utils': { redirect: '/docs/4.x/directory-structure/app/utils', prerender: false },
'/docs/5.x/guide/directory-structure/utils': { redirect: '/docs/4.x/directory-structure/app/utils', prerender: false },
'/docs/4.x/guide/directory-structure/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/5.x/guide/directory-structure/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/3.x/guide/directory-structure-config/app': { redirect: '/docs/3.x/directory-structure/app-config', prerender: false },
'/docs/4.x/guide/guide/directory-structure/app-config': { redirect: '/docs/4.x/directory-structure/app/app-config', prerender: false },
'/docs/5.x/guide/guide/directory-structure/app-config': { redirect: '/docs/4.x/directory-structure/app/app-config', prerender: false },
'/docs/3.x/guide/directory-structure/app/error': { redirect: '/docs/3.x/directory-structure/error', prerender: false },
'/docs/4.x/guide/directory-structure/error': { redirect: '/docs/4.x/directory-structure/app/error', prerender: false },
'/docs/5.x/guide/directory-structure/error': { redirect: '/docs/4.x/directory-structure/app/error', prerender: false },
// old directory structure in guide
'/docs/4.x/guide/directory-structure/nuxt': { redirect: '/docs/4.x/directory-structure/nuxt', prerender: false },
'/docs/5.x/guide/directory-structure/nuxt': { redirect: '/docs/4.x/directory-structure/nuxt', prerender: false },
'/docs/4.x/guide/directory-structure/output': { redirect: '/docs/4.x/directory-structure/output', prerender: false },
'/docs/5.x/guide/directory-structure/output': { redirect: '/docs/4.x/directory-structure/output', prerender: false },
'/docs/4.x/guide/directory-structure/app/assets': { redirect: '/docs/4.x/directory-structure/app/assets', prerender: false },
'/docs/5.x/guide/directory-structure/app/assets': { redirect: '/docs/4.x/directory-structure/app/assets', prerender: false },
'/docs/4.x/guide/directory-structure/app/components': { redirect: '/docs/4.x/directory-structure/app/components', prerender: false },
'/docs/5.x/guide/directory-structure/app/components': { redirect: '/docs/4.x/directory-structure/app/components', prerender: false },
'/docs/4.x/guide/directory-structure/app/composables': { redirect: '/docs/4.x/directory-structure/app/composables', prerender: false },
'/docs/5.x/guide/directory-structure/app/composables': { redirect: '/docs/4.x/directory-structure/app/composables', prerender: false },
'/docs/4.x/guide/directory-structure/app/layouts': { redirect: '/docs/4.x/directory-structure/app/layouts', prerender: false },
'/docs/5.x/guide/directory-structure/app/layouts': { redirect: '/docs/4.x/directory-structure/app/layouts', prerender: false },
'/docs/4.x/guide/directory-structure/app/middleware': { redirect: '/docs/4.x/directory-structure/app/middleware', prerender: false },
'/docs/5.x/guide/directory-structure/app/middleware': { redirect: '/docs/4.x/directory-structure/app/middleware', prerender: false },
'/docs/4.x/guide/directory-structure/app/pages': { redirect: '/docs/4.x/directory-structure/app/pages', prerender: false },
'/docs/5.x/guide/directory-structure/app/pages': { redirect: '/docs/4.x/directory-structure/app/pages', prerender: false },
'/docs/4.x/guide/directory-structure/app/plugins': { redirect: '/docs/4.x/directory-structure/app/plugins', prerender: false },
'/docs/5.x/guide/directory-structure/app/plugins': { redirect: '/docs/4.x/directory-structure/app/plugins', prerender: false },
'/docs/4.x/guide/directory-structure/app/utils': { redirect: '/docs/4.x/directory-structure/app/utils', prerender: false },
'/docs/5.x/guide/directory-structure/app/utils': { redirect: '/docs/4.x/directory-structure/app/utils', prerender: false },
'/docs/4.x/guide/directory-structure/app/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/5.x/guide/directory-structure/app/app': { redirect: '/docs/4.x/directory-structure/app/app', prerender: false },
'/docs/4.x/guide/directory-structure/app/app-config': { redirect: '/docs/4.x/directory-structure/app/app-config', prerender: false },
'/docs/5.x/guide/directory-structure/app/app-config': { redirect: '/docs/4.x/directory-structure/app/app-config', prerender: false },
'/docs/4.x/guide/directory-structure/app/error': { redirect: '/docs/4.x/directory-structure/app/error', prerender: false },
'/docs/5.x/guide/directory-structure/app/error': { redirect: '/docs/4.x/directory-structure/app/error', prerender: false },
'/docs/4.x/guide/directory-structure/content': { redirect: '/docs/4.x/directory-structure/content', prerender: false },
'/docs/5.x/guide/directory-structure/content': { redirect: '/docs/4.x/directory-structure/content', prerender: false },
'/docs/4.x/guide/directory-structure/modules': { redirect: '/docs/4.x/directory-structure/modules', prerender: false },
'/docs/5.x/guide/directory-structure/modules': { redirect: '/docs/4.x/directory-structure/modules', prerender: false },
'/docs/4.x/guide/directory-structure/node_modules': { redirect: '/docs/4.x/directory-structure/node_modules', prerender: false },
'/docs/5.x/guide/directory-structure/node_modules': { redirect: '/docs/4.x/directory-structure/node_modules', prerender: false },
'/docs/4.x/guide/directory-structure/public': { redirect: '/docs/4.x/directory-structure/public', prerender: false },
'/docs/5.x/guide/directory-structure/public': { redirect: '/docs/4.x/directory-structure/public', prerender: false },
'/docs/4.x/guide/directory-structure/server': { redirect: '/docs/4.x/directory-structure/server', prerender: false },
'/docs/5.x/guide/directory-structure/server': { redirect: '/docs/4.x/directory-structure/server', prerender: false },
'/docs/4.x/guide/directory-structure/shared': { redirect: '/docs/4.x/directory-structure/shared', prerender: false },
'/docs/5.x/guide/directory-structure/shared': { redirect: '/docs/4.x/directory-structure/shared', prerender: false },
'/docs/4.x/guide/directory-structure/env': { redirect: '/docs/4.x/directory-structure/env', prerender: false },
'/docs/5.x/guide/directory-structure/env': { redirect: '/docs/4.x/directory-structure/env', prerender: false },
'/docs/4.x/guide/directory-structure/gitignore': { redirect: '/docs/4.x/directory-structure/gitignore', prerender: false },
'/docs/5.x/guide/directory-structure/gitignore': { redirect: '/docs/4.x/directory-structure/gitignore', prerender: false },
'/docs/4.x/guide/directory-structure/nuxtignore': { redirect: '/docs/4.x/directory-structure/nuxtignore', prerender: false },
'/docs/5.x/guide/directory-structure/nuxtignore': { redirect: '/docs/4.x/directory-structure/nuxtignore', prerender: false },
'/docs/4.x/guide/directory-structure/nuxtrc': { redirect: '/docs/4.x/directory-structure/nuxtrc', prerender: false },
'/docs/5.x/guide/directory-structure/nuxtrc': { redirect: '/docs/4.x/directory-structure/nuxtrc', prerender: false },
'/docs/4.x/guide/directory-structure/nuxt-config': { redirect: '/docs/4.x/directory-structure/nuxt-config', prerender: false },
'/docs/5.x/guide/directory-structure/nuxt-config': { redirect: '/docs/4.x/directory-structure/nuxt-config', prerender: false },
'/docs/4.x/guide/directory-structure/package': { redirect: '/docs/4.x/directory-structure/package', prerender: false },
'/docs/5.x/guide/directory-structure/package': { redirect: '/docs/4.x/directory-structure/package', prerender: false },
'/docs/4.x/guide/directory-structure/tsconfig': { redirect: '/docs/4.x/directory-structure/tsconfig', prerender: false },
'/docs/5.x/guide/directory-structure/tsconfig': { redirect: '/docs/4.x/directory-structure/tsconfig', prerender: false },
// '/docs/guide/directory-structure/nuxt.config': { redirect: '/docs/guide/directory-structure/nuxt-config', prerender: false },
'/enterprise': { redirect: '/enterprise/agencies', prerender: false },
'/enterprise/support': { redirect: '/enterprise/agencies', prerender: false },
'/support/us': { redirect: '/enterprise/sponsors', prerender: false },
'/docs/4.x/guide/ai': { redirect: '/docs/4.x/guide/ai/mcp', prerender: false },
'/docs/5.x/guide/ai': { redirect: '/docs/5.x/guide/ai/mcp', prerender: false },
'/docs/3.x/guide/ai': { redirect: '/docs/4.x/guide/ai/mcp', prerender: false },
// showcase assets
'/assets/websites/12go.png': { redirect: '/assets/websites/12go.webp' },
'/assets/websites/git-lab.png': { redirect: '/assets/websites/git-lab.webp' },
'/assets/websites/mc-donalds-france.png': { redirect: '/assets/websites/mc-donalds-france.webp' },
'/assets/websites/stack-overflow.png': { redirect: '/assets/websites/stack-overflow.webp' },
'/assets/websites/armani.png': { redirect: '/assets/websites/armani.webp' },
'/assets/websites/google-ventures.png': { redirect: '/assets/websites/google-ventures.webp' },
'/assets/websites/microsoft-edge-developer.png': { redirect: '/assets/websites/microsoft-edge-developer.webp' },
'/assets/websites/the-north-face.png': { redirect: '/assets/websites/the-north-face.webp' },
'/assets/websites/buy-mea-coffee.png': { redirect: '/assets/websites/buy-mea-coffee.webp' },
'/assets/websites/hai.png': { redirect: '/assets/websites/hai.webp' },
'/assets/websites/n8n.png': { redirect: '/assets/websites/n8n.webp' },
'/assets/websites/tiktok-ads.png': { redirect: '/assets/websites/tiktok-ads.webp' },
'/assets/websites/caudalie.png': { redirect: '/assets/websites/caudalie.webp' },
'/assets/websites/harrods.png': { redirect: '/assets/websites/harrods.webp' },
'/assets/websites/nasa-jet-propulsion-laboratory.png': { redirect: '/assets/websites/nasa-jet-propulsion-laboratory.webp' },
'/assets/websites/timberland.png': { redirect: '/assets/websites/timberland.webp' },
'/assets/websites/clean-shot-x.png': { redirect: '/assets/websites/clean-shot-x.webp' },
'/assets/websites/hostel-world.png': { redirect: '/assets/websites/hostel-world.webp' },
'/assets/websites/on-running.png': { redirect: '/assets/websites/on-running.webp' },
'/assets/websites/too-good-to-go.png': { redirect: '/assets/websites/too-good-to-go.webp' },
'/assets/websites/croix-rouge.png': { redirect: '/assets/websites/croix-rouge.webp' },
'/assets/websites/hostinger.png': { redirect: '/assets/websites/hostinger.webp' },
'/assets/websites/paul-smith.png': { redirect: '/assets/websites/paul-smith.webp' },
'/assets/websites/toolstation.png': { redirect: '/assets/websites/toolstation.webp' },
'/assets/websites/delvaux.png': { redirect: '/assets/websites/delvaux.webp' },
'/assets/websites/icons8.png': { redirect: '/assets/websites/icons8.webp' },
'/assets/websites/promod.png': { redirect: '/assets/websites/promod.webp' },
'/assets/websites/trade-republic.png': { redirect: '/assets/websites/trade-republic.webp' },
'/assets/websites/departamento.png': { redirect: '/assets/websites/departamento.webp' },
'/assets/websites/immersive-garden.png': { redirect: '/assets/websites/immersive-garden.webp' },
'/assets/websites/push-security.png': { redirect: '/assets/websites/push-security.webp' },
'/assets/websites/upwork.png': { redirect: '/assets/websites/upwork.webp' },
'/assets/websites/directus.png': { redirect: '/assets/websites/directus.webp' },
'/assets/websites/le-collectionist.png': { redirect: '/assets/websites/le-collectionist.webp' },
'/assets/websites/roland-garros.png': { redirect: '/assets/websites/roland-garros.webp' },
'/assets/websites/vans.png': { redirect: '/assets/websites/vans.webp' },
'/assets/websites/explore-france.png': { redirect: '/assets/websites/explore-france.webp' },
'/assets/websites/louis-vuitton.png': { redirect: '/assets/websites/louis-vuitton.webp' },
'/assets/websites/shaina-mote.png': { redirect: '/assets/websites/shaina-mote.webp' },
'/assets/websites/virgin-galactic.png': { redirect: '/assets/websites/virgin-galactic.webp' },
// missing redirects
'/docs/4.x/examples/essentials/hello-world': { redirect: '/docs/4.x/examples/hello-world', prerender: false },
'/docs/5.x/examples/essentials/hello-world': { redirect: '/docs/4.x/examples/hello-world', prerender: false },
'/docs/4.x/api/composables/usehead': { redirect: '/docs/4.x/api/composables/use-head', prerender: false },
'/docs/5.x/api/composables/usehead': { redirect: '/docs/4.x/api/composables/use-head', prerender: false },
'/docs/4.x/examples/composables/use-async-data': { redirect: '/docs/4.x/examples/features/data-fetching', prerender: false },
'/docs/5.x/examples/composables/use-async-data': { redirect: '/docs/4.x/examples/features/data-fetching', prerender: false },
'/docs/4.x/examples/composables/use-head': { redirect: '/docs/4.x/examples/features/meta-tags', prerender: false },
'/docs/5.x/examples/composables/use-head': { redirect: '/docs/4.x/examples/features/meta-tags', prerender: false },
'/docs/4.x/getting-started/directory-structure': { redirect: '/docs/4.x/directory-structure', prerender: false },
'/docs/5.x/getting-started/directory-structure': { redirect: '/docs/4.x/directory-structure', prerender: false },
'/docs/4.x/guide/going-further/modules': { redirect: '/docs/4.x/guide/modules', prerender: false },
'/docs/5.x/guide/going-further/modules': { redirect: '/docs/4.x/guide/modules', prerender: false },
'/docs/4.x/guide/concepts/rendering-modes': { redirect: '/docs/4.x/guide/concepts/rendering', prerender: false },
'/docs/5.x/guide/concepts/rendering-modes': { redirect: '/docs/4.x/guide/concepts/rendering', prerender: false },
'/docs/4.x/guide/directory-structure/nuxt.config': { redirect: '/docs/4.x/directory-structure/nuxt-config', prerender: false },
'/docs/5.x/guide/directory-structure/nuxt.config': { redirect: '/docs/4.x/directory-structure/nuxt-config', prerender: false },
'/docs/4.x/getting-started/hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/5.x/getting-started/hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/4.x/api/nuxt-hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/5.x/api/nuxt-hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/4.x/guide/directory-structure/hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/5.x/guide/directory-structure/hooks': { redirect: '/docs/4.x/api/advanced/hooks', prerender: false },
'/docs/4.x/robots.txt': { redirect: '/robots.txt', prerender: false },
'/docs/5.x/robots.txt': { redirect: '/robots.txt', prerender: false },
'/deploy/nuxthub': { redirect: '/deploy/vercel', prerender: false }
},
sourcemap: true,
experimental: {
extractAsyncDataHandlers: true,
defaults: {
nuxtLink: {
externalRelAttribute: 'noopener'
}
},
viteEnvironmentApi: true
},
compatibilityDate: '2026-01-14',
nitro: {
prerender: {
crawlLinks: true,
ignore: [
route => route.startsWith('/modules/'),
route => route.startsWith('/admin')
],
autoSubfolderIndex: false
}
},
hub: {
db: 'sqlite',
kv: true,
cache: true
},
vite: {
optimizeDeps: {
exclude: ['vue-chrts']
}
},
typescript: {
strict: false,
tsConfig: {
include: ['../test/nuxt']
}
},
hooks: {
'content:file:beforeParse': async ({ file }) => {
if (file.id.startsWith('docsv5/')) {
file.body = file.body.replaceAll(/\(\/docs\/(?!\d\.x)/g, '(/docs/5.x/')
}
if (file.id.startsWith('docsv4/')) {
file.body = file.body.replaceAll(/\(\/docs\/(?!\d\.x)/g, '(/docs/4.x/')
}
},
'content:file:afterParse': async ({ file, content }) => {
if (file.id === 'index/index.yml') {
// @ts-expect-error -- TODO: fix this
for (const tab of content.hero.tabs) {
tab.content = await parseMdc(tab.content)
}
// @ts-expect-error -- TODO: fix this
delete content.meta.body
}
}
},
eslint: {
config: {
stylistic: {
commaDangle: 'never'
}
}
},
icon: {
customCollections: [{
prefix: 'custom',
dir: resolve('./app/assets/icons')
}],
clientBundle: {
scan: true,
includeCustomCollections: true
},
provider: 'iconify'
},
image: {
// format: ['webp', 'jpeg', 'jpg', 'png', 'svg'],
// provider: 'ipx'
},
llms: {
domain: 'https://nuxt.zhcndoc.com',
title: 'Nuxt 中文文档',
description: 'Nuxt 是一个开源框架,使网页开发直观而强大。自信地创建高性能和生产级的全栈网页应用和网站。',
full: {
title: 'Nuxt 中文文档',
description: '完整的 Nuxt 文档和用 Markdown(MDC 语法)撰写的博客文章。'
},
sections: [
{
title: 'Nuxt v5 文档',
contentCollection: 'docsv5',
contentFilters: [{ field: 'extension', operator: '=', value: 'md' }]
},
{
title: 'Nuxt v4 文档',
contentCollection: 'docsv4',
contentFilters: [{ field: 'extension', operator: '=', value: 'md' }]
},
{
title: '部署指南',
contentCollection: 'deploy',
contentFilters: [{ field: 'extension', operator: '=', value: 'md' }]
},
{
title: 'Nuxt v3 文档',
contentCollection: 'docsv3',
contentFilters: [{ field: 'extension', operator: '=', value: 'md' }]
},
{
title: '博客',
contentCollection: 'blog',
contentFilters: [{ field: 'extension', operator: '=', value: 'md' }]
}
]
},
mcp: {
name: 'Nuxt',
route: '/mcp',
browserRedirect: '/docs/guide/ai/mcp'
},
// turnstile: {
// siteKey: '0x4AAAAAAAP2vNBsTBT3ucZi'
// },
twoslash: {
floatingVueOptions: {
classMarkdown: 'prose prose-primary dark:prose-invert'
},
// Skip Twoslash in dev to improve performance. Turn this on when you want to explicitly test twoslash in dev.
enableInDev: false,
// Do not throw when twoslash fails, the typecheck should be down in github.com/nuxt/nuxt's CI
throws: false
}
})