diff --git a/packages/nuxi/src/utils/dev.ts b/packages/nuxi/src/utils/dev.ts index bdc09b141..b25f26f77 100644 --- a/packages/nuxi/src/utils/dev.ts +++ b/packages/nuxi/src/utils/dev.ts @@ -19,7 +19,7 @@ import { joinURL } from 'ufo' import { clearBuildDir } from '../utils/fs' import { loadKit } from '../utils/kit' import { logger } from '../utils/logger' -import { loadNuxtManifest, writeNuxtManifest } from '../utils/nuxt' +import { loadNuxtManifest, resolveNuxtManifest, writeNuxtManifest } from '../utils/nuxt' export type NuxtDevIPCMessage = | { type: 'nuxt:internal:dev:ready', port: number } @@ -216,10 +216,15 @@ class NuxtDevServer extends EventEmitter { // Write manifest and also check if we need cache invalidation if (!reload) { - const previousManifest = await loadNuxtManifest( - this._currentNuxt.options.buildDir, - ) - const newManifest = await writeNuxtManifest(this._currentNuxt) + const previousManifest = await loadNuxtManifest(this._currentNuxt.options.buildDir) + const newManifest = resolveNuxtManifest(this._currentNuxt) + + // we deliberately do not block initialising Nuxt on creation of the manifest + const promise = writeNuxtManifest(this._currentNuxt, newManifest) + this._currentNuxt.hooks.hookOnce('ready', async () => { + await promise + }) + if ( previousManifest && newManifest @@ -284,7 +289,6 @@ class NuxtDevServer extends EventEmitter { } await Promise.all([ - kit.writeTypes(this._currentNuxt).catch(console.error), kit.buildNuxt(this._currentNuxt), ]) diff --git a/packages/nuxi/src/utils/fs.ts b/packages/nuxi/src/utils/fs.ts index bc7c2273c..13258f08b 100644 --- a/packages/nuxi/src/utils/fs.ts +++ b/packages/nuxi/src/utils/fs.ts @@ -32,7 +32,7 @@ export async function clearDir(path: string, exclude?: string[]) { } export function clearBuildDir(path: string) { - return clearDir(path, ['cache', 'analyze']) + return clearDir(path, ['cache', 'analyze', 'nuxt.json']) } export async function rmRecursive(paths: string[]) { diff --git a/packages/nuxi/src/utils/nuxt.ts b/packages/nuxi/src/utils/nuxt.ts index c0b5e29a6..d8863f0ee 100644 --- a/packages/nuxi/src/utils/nuxt.ts +++ b/packages/nuxi/src/utils/nuxt.ts @@ -42,7 +42,7 @@ export function nuxtVersionToGitIdentifier(version: string) { return `v${version}` } -function resolveNuxtManifest(nuxt: Nuxt): NuxtProjectManifest { +export function resolveNuxtManifest(nuxt: Nuxt): NuxtProjectManifest { const manifest: NuxtProjectManifest = { _hash: null, project: { @@ -56,19 +56,14 @@ function resolveNuxtManifest(nuxt: Nuxt): NuxtProjectManifest { return manifest } -export async function writeNuxtManifest( - nuxt: Nuxt, -): Promise { - const manifest = resolveNuxtManifest(nuxt) +export async function writeNuxtManifest(nuxt: Nuxt, manifest = resolveNuxtManifest(nuxt)): Promise { const manifestPath = resolve(nuxt.options.buildDir, 'nuxt.json') await fsp.mkdir(dirname(manifestPath), { recursive: true }) await fsp.writeFile(manifestPath, JSON.stringify(manifest, null, 2), 'utf-8') return manifest } -export async function loadNuxtManifest( - buildDir: string, -): Promise { +export async function loadNuxtManifest(buildDir: string): Promise { const manifestPath = resolve(buildDir, 'nuxt.json') const manifest: NuxtProjectManifest | null = await fsp .readFile(manifestPath, 'utf-8')