From 0e9506bb5656ff816b46f565d2653335c7bcced9 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 30 Mar 2022 01:18:45 +0800 Subject: [PATCH 1/2] fix(vite-node): improve manifest generation --- packages/vite/src/runtime/server.mjs | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/vite/src/runtime/server.mjs b/packages/vite/src/runtime/server.mjs index 3d043027752..91caf6610f8 100644 --- a/packages/vite/src/runtime/server.mjs +++ b/packages/vite/src/runtime/server.mjs @@ -23,13 +23,15 @@ function isCSS (file) { return IS_CSS_RE.test(file) } -async function writeManifest (extraEntries) { +async function writeManifest () { const dir = dirname(fileURLToPath(import.meta.url)) const entries = [ '@vite/client', 'entry.mjs', - ...extraEntries + ...Array.from(runner.moduleCache.keys()) + .filter(i => runner.moduleCache.get(i).exports && isCSS(i)) + .map(i => i.slice(1)) ] const clientManifest = { @@ -47,8 +49,6 @@ async function writeManifest (extraEntries) { export default async (ssrContext) => { const { default: render } = await runner.executeFile(entry) const result = await render(ssrContext) - const modules = Array.from(runner.moduleCache.keys()) - // Write CSS modules intro manifest to prevent FOUC - await writeManifest(modules.filter(i => isCSS(i)).map(i => i.slice(1))) + await writeManifest() return result } From 43dba280ac3fd0586fb409b3af370edf69b6b149 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Wed, 30 Mar 2022 18:37:15 +0800 Subject: [PATCH 2/2] feat: update --- packages/vite/src/runtime/server.mjs | 13 ++++++++----- packages/vite/src/vite-node.ts | 18 +++++++++--------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/packages/vite/src/runtime/server.mjs b/packages/vite/src/runtime/server.mjs index 91caf6610f8..cdaccbc983e 100644 --- a/packages/vite/src/runtime/server.mjs +++ b/packages/vite/src/runtime/server.mjs @@ -3,12 +3,13 @@ import { fileURLToPath } from 'url' import { ViteNodeRunner } from 'vite-node/client' import { dirname, join } from 'pathe' -const entry = '__NUXT_SERVER_ENTRY__' -const url = '__NUXT_SERVER_FETCH_URL__' -const base = '__NUXT_SERVER_BASE__' +const url = process.env.NUXT_VITE_SERVER_FETCH +const entry = process.env.NUXT_VITE_SERVER_ENTRY +const base = process.env.NUXT_VITE_SERVER_BASE +const root = process.env.NUXT_VITE_SERVER_ROOT const runner = new ViteNodeRunner({ - root: process.cwd(), + root, base, async fetchModule (id) { return await $fetch(url, { @@ -46,8 +47,10 @@ async function writeManifest () { await fs.writeFile(join(dir, 'client.manifest.mjs'), 'export default ' + JSON.stringify(clientManifest, null, 2), 'utf8') } +let render + export default async (ssrContext) => { - const { default: render } = await runner.executeFile(entry) + render = render || (await runner.executeFile(entry)).default const result = await render(ssrContext) await writeManifest() return result diff --git a/packages/vite/src/vite-node.ts b/packages/vite/src/vite-node.ts index 0b4198df819..f0e0daae303 100644 --- a/packages/vite/src/vite-node.ts +++ b/packages/vite/src/vite-node.ts @@ -62,18 +62,18 @@ export async function prepareDevServerEntry (ctx: ViteBuildContext) { entryPath = resolve(ctx.nuxt.options.appDir, 'entry.async') } - const raw = await fse.readFile(resolve(distDir, 'runtime/server.mjs'), 'utf-8') const host = ctx.nuxt.options.server.host || 'localhost' const port = ctx.nuxt.options.server.port || '3000' const protocol = ctx.nuxt.options.server.https ? 'https' : 'http' - const code = raw - .replace('__NUXT_SERVER_FETCH_URL__', `${protocol}://${host}:${port}/__nuxt_vite_node__/`) - .replace('__NUXT_SERVER_ENTRY__', entryPath) - .replace('__NUXT_SERVER_BASE__', ctx.ssrServer.config.base || '/_nuxt/') - await fse.writeFile( - resolve(ctx.nuxt.options.buildDir, 'dist/server/server.mjs'), - code, - 'utf-8' + + process.env.NUXT_VITE_SERVER_FETCH = `${protocol}://${host}:${port}/__nuxt_vite_node__/` + process.env.NUXT_VITE_SERVER_ENTRY = entryPath + process.env.NUXT_VITE_SERVER_BASE = ctx.ssrServer.config.base || '/_nuxt/' + process.env.NUXT_VITE_SERVER_ROOT = ctx.nuxt.options.rootDir + + await fse.copyFile( + resolve(distDir, 'runtime/server.mjs'), + resolve(ctx.nuxt.options.buildDir, 'dist/server/server.mjs') ) }