mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 13:45:18 +00:00
fix(nuxt): ensure static presets equivalent to nuxi generate
(#21860)
This commit is contained in:
parent
d4addcf7b1
commit
669e9bcf2d
@ -29,7 +29,9 @@ export default defineNuxtCommand({
|
|||||||
},
|
},
|
||||||
overrides: {
|
overrides: {
|
||||||
logLevel: args['log-level'],
|
logLevel: args['log-level'],
|
||||||
|
// TODO: remove in 3.8
|
||||||
_generate: args.prerender,
|
_generate: args.prerender,
|
||||||
|
...(args.prerender ? { nitro: { static: true } } : {}),
|
||||||
...(options?.overrides || {})
|
...(options?.overrides || {})
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@ -38,7 +38,6 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const nitroConfig: NitroConfig = defu(_nitroConfig, {
|
const nitroConfig: NitroConfig = defu(_nitroConfig, {
|
||||||
static: nuxt.options._generate,
|
|
||||||
debug: nuxt.options.debug,
|
debug: nuxt.options.debug,
|
||||||
rootDir: nuxt.options.rootDir,
|
rootDir: nuxt.options.rootDir,
|
||||||
workspaceDir: nuxt.options.workspaceDir,
|
workspaceDir: nuxt.options.workspaceDir,
|
||||||
@ -133,10 +132,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
prerender: {
|
prerender: {
|
||||||
failOnError: true,
|
failOnError: true,
|
||||||
concurrency: cpus().length * 4 || 4,
|
concurrency: cpus().length * 4 || 4,
|
||||||
crawlLinks: nuxt.options._generate ?? undefined,
|
routes: ([] as string[]).concat(nuxt.options.generate.routes)
|
||||||
routes: ([] as string[])
|
|
||||||
.concat(nuxt.options.generate.routes)
|
|
||||||
.concat(nuxt.options._generate ? [nuxt.options.ssr ? '/' : '/index.html', '/200.html', '/404.html'] : [])
|
|
||||||
},
|
},
|
||||||
sourceMap: nuxt.options.sourcemap.server,
|
sourceMap: nuxt.options.sourcemap.server,
|
||||||
externals: {
|
externals: {
|
||||||
@ -360,6 +356,14 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
opts.references.push({ path: resolve(nuxt.options.buildDir, 'types/nitro.d.ts') })
|
opts.references.push({ path: resolve(nuxt.options.buildDir, 'types/nitro.d.ts') })
|
||||||
})
|
})
|
||||||
|
|
||||||
|
if (nitro.options.static) {
|
||||||
|
nitro.hooks.hook('prerender:routes', (routes) => {
|
||||||
|
for (const route of [nuxt.options.ssr ? '/' : '/index.html', '/200.html', '/404.html']) {
|
||||||
|
routes.add(route)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
// nuxt build/dev
|
// nuxt build/dev
|
||||||
nuxt.hook('build:done', async () => {
|
nuxt.hook('build:done', async () => {
|
||||||
await nuxt.callHook('nitro:build:before', nitro)
|
await nuxt.callHook('nitro:build:before', nitro)
|
||||||
@ -375,7 +379,7 @@ export async function initNitro (nuxt: Nuxt & { _nitro?: Nitro }) {
|
|||||||
await build(nitro)
|
await build(nitro)
|
||||||
logger.wrapAll()
|
logger.wrapAll()
|
||||||
|
|
||||||
if (nuxt.options._generate) {
|
if (nitro.options.static) {
|
||||||
const distDir = resolve(nuxt.options.rootDir, 'dist')
|
const distDir = resolve(nuxt.options.rootDir, 'dist')
|
||||||
if (!existsSync(distDir)) {
|
if (!existsSync(distDir)) {
|
||||||
await fsp.symlink(nitro.options.output.publicDir, distDir, 'junction').catch(() => {})
|
await fsp.symlink(nitro.options.output.publicDir, distDir, 'junction').catch(() => {})
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
import { join, normalize, relative, resolve } from 'pathe'
|
import { join, normalize, relative, resolve } from 'pathe'
|
||||||
import { createDebugger, createHooks } from 'hookable'
|
import { createDebugger, createHooks } from 'hookable'
|
||||||
import type { LoadNuxtOptions } from '@nuxt/kit'
|
import type { LoadNuxtOptions } from '@nuxt/kit'
|
||||||
import { addBuildPlugin, addComponent, addPlugin, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, logger, nuxtCtx, resolveAlias, resolveFiles, resolvePath, tryResolveModule } from '@nuxt/kit'
|
import { addBuildPlugin, addComponent, addPlugin, addVitePlugin, addWebpackPlugin, installModule, loadNuxtConfig, logger, nuxtCtx, resolveAlias, resolveFiles, resolvePath, tryResolveModule, useNitro } from '@nuxt/kit'
|
||||||
import type { Nuxt, NuxtHooks, NuxtOptions } from 'nuxt/schema'
|
import type { Nuxt, NuxtHooks, NuxtOptions } from 'nuxt/schema'
|
||||||
|
|
||||||
import escapeRE from 'escape-string-regexp'
|
import escapeRE from 'escape-string-regexp'
|
||||||
@ -271,15 +271,6 @@ async function initNuxt (nuxt: Nuxt) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
// Add prerender payload support
|
|
||||||
if (nuxt.options._generate && nuxt.options.experimental.payloadExtraction === undefined) {
|
|
||||||
console.warn('Using experimental payload extraction for full-static output. You can opt-out by setting `experimental.payloadExtraction` to `false`.')
|
|
||||||
nuxt.options.experimental.payloadExtraction = true
|
|
||||||
}
|
|
||||||
if (!nuxt.options.dev && nuxt.options.experimental.payloadExtraction) {
|
|
||||||
addPlugin(resolve(nuxt.options.appDir, 'plugins/payload.client'))
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add experimental cross-origin prefetch support using Speculation Rules API
|
// Add experimental cross-origin prefetch support using Speculation Rules API
|
||||||
if (nuxt.options.experimental.crossOriginPrefetch) {
|
if (nuxt.options.experimental.crossOriginPrefetch) {
|
||||||
addPlugin(resolve(nuxt.options.appDir, 'plugins/cross-origin-prefetch.client'))
|
addPlugin(resolve(nuxt.options.appDir, 'plugins/cross-origin-prefetch.client'))
|
||||||
@ -381,6 +372,16 @@ async function initNuxt (nuxt: Nuxt) {
|
|||||||
// Init nitro
|
// Init nitro
|
||||||
await initNitro(nuxt)
|
await initNitro(nuxt)
|
||||||
|
|
||||||
|
// TODO: remove when app manifest support is landed in https://github.com/nuxt/nuxt/pull/21641
|
||||||
|
// Add prerender payload support
|
||||||
|
if (useNitro().options.static && nuxt.options.experimental.payloadExtraction === undefined) {
|
||||||
|
console.warn('Using experimental payload extraction for full-static output. You can opt-out by setting `experimental.payloadExtraction` to `false`.')
|
||||||
|
nuxt.options.experimental.payloadExtraction = true
|
||||||
|
}
|
||||||
|
if (!nuxt.options.dev && nuxt.options.experimental.payloadExtraction) {
|
||||||
|
addPlugin(resolve(nuxt.options.appDir, 'plugins/payload.client'))
|
||||||
|
}
|
||||||
|
|
||||||
await nuxt.callHook('ready', nuxt)
|
await nuxt.callHook('ready', nuxt)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -201,8 +201,9 @@ export default defineNuxtModule({
|
|||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// Prerender all non-dynamic page routes when generating app
|
nuxt.hook('nitro:init', (nitro) => {
|
||||||
if (!nuxt.options.dev && nuxt.options._generate) {
|
if (nuxt.options.dev || !nitro.options.static) { return }
|
||||||
|
// Prerender all non-dynamic page routes when generating app
|
||||||
const prerenderRoutes = new Set<string>()
|
const prerenderRoutes = new Set<string>()
|
||||||
nuxt.hook('modules:done', () => {
|
nuxt.hook('modules:done', () => {
|
||||||
nuxt.hook('pages:extend', (pages) => {
|
nuxt.hook('pages:extend', (pages) => {
|
||||||
@ -230,7 +231,7 @@ export default defineNuxtModule({
|
|||||||
}
|
}
|
||||||
nitro.options.prerender.routes = Array.from(prerenderRoutes)
|
nitro.options.prerender.routes = Array.from(prerenderRoutes)
|
||||||
})
|
})
|
||||||
}
|
})
|
||||||
|
|
||||||
nuxt.hook('imports:extend', (imports) => {
|
nuxt.hook('imports:extend', (imports) => {
|
||||||
imports.push(
|
imports.push(
|
||||||
|
Loading…
Reference in New Issue
Block a user