From afa0ae019f3039c5174f0cad58249e76c4634974 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 17 May 2022 11:26:46 +0800 Subject: [PATCH 1/5] fix(vite-node): improve manifest loading --- packages/nuxt/src/core/runtime/nitro/renderer.ts | 12 +++++++++--- packages/vite/src/runtime/client.manifest.mjs | 4 +--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/src/core/runtime/nitro/renderer.ts b/packages/nuxt/src/core/runtime/nitro/renderer.ts index 4bf3ab9ecb2..c8711f508a0 100644 --- a/packages/nuxt/src/core/runtime/nitro/renderer.ts +++ b/packages/nuxt/src/core/runtime/nitro/renderer.ts @@ -43,13 +43,15 @@ interface RenderResult { } // @ts-ignore -const getClientManifest = () => import('#build/dist/server/client.manifest.mjs').then(r => r.default || r) +const getClientManifest = () => import('#build/dist/server/client.manifest.mjs') + .then(r => r.default || r) + .then(r => typeof r === 'function' ? r() : r) // @ts-ignore const getServerEntry = () => process.env.NUXT_NO_SSR ? Promise.resolve(null) : import('#build/dist/server/server.mjs').then(r => r.default || r) // -- SSR Renderer -- -const getSSRRenderer = lazyCachedFunction(async () => { +const _getSSRRenderer = async () => { // Load client manifest const clientManifest = await getClientManifest() if (!clientManifest) { throw new Error('client.manifest is not available') } @@ -68,7 +70,11 @@ const getSSRRenderer = lazyCachedFunction(async () => { renderToString, publicPath: buildAssetsURL() }) -}) +} + +const getSSRRenderer = process.env.NUXT_VITE_NODE_OPTIONS + ? _getSSRRenderer // Do not cache in development + : lazyCachedFunction(_getSSRRenderer) // -- SPA Renderer -- const getSPARenderer = lazyCachedFunction(async () => { diff --git a/packages/vite/src/runtime/client.manifest.mjs b/packages/vite/src/runtime/client.manifest.mjs index f69d7371d26..f33e3b2a794 100644 --- a/packages/vite/src/runtime/client.manifest.mjs +++ b/packages/vite/src/runtime/client.manifest.mjs @@ -3,6 +3,4 @@ import { getViteNodeOptions } from './vite-node-shared.mjs' const viteNodeOptions = getViteNodeOptions() -const manifest = await $fetch('/manifest', { baseURL: viteNodeOptions.baseURL }) - -export default manifest +export default () => $fetch('/manifest', { baseURL: viteNodeOptions.baseURL }) From a3eea8ab69bc787c0874a3ce5408b3b114336c28 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 17 May 2022 12:11:25 +0800 Subject: [PATCH 2/5] chore: update type --- packages/vite/src/runtime/vite-node-shared.mjs | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/vite/src/runtime/vite-node-shared.mjs b/packages/vite/src/runtime/vite-node-shared.mjs index 050a6ee785b..509063e6c66 100644 --- a/packages/vite/src/runtime/vite-node-shared.mjs +++ b/packages/vite/src/runtime/vite-node-shared.mjs @@ -1,4 +1,3 @@ -/** @type {import('./vite-node-shared').getViteNodeOptions} */ export function getViteNodeOptions () { return JSON.parse(process.env.NUXT_VITE_NODE_OPTIONS || '{}') } From 55017e62958d9e7e792c1696f0ebb612af367879 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 17 May 2022 14:42:21 +0800 Subject: [PATCH 3/5] fix(vite-node): get manifest after rendering --- .../nuxt/src/core/runtime/nitro/renderer.ts | 23 +++++++++++-------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/packages/nuxt/src/core/runtime/nitro/renderer.ts b/packages/nuxt/src/core/runtime/nitro/renderer.ts index c8711f508a0..28331c86ec9 100644 --- a/packages/nuxt/src/core/runtime/nitro/renderer.ts +++ b/packages/nuxt/src/core/runtime/nitro/renderer.ts @@ -51,7 +51,7 @@ const getClientManifest = () => import('#build/dist/server/client.manifest.mjs') const getServerEntry = () => process.env.NUXT_NO_SSR ? Promise.resolve(null) : import('#build/dist/server/server.mjs').then(r => r.default || r) // -- SSR Renderer -- -const _getSSRRenderer = async () => { +const getSSRRenderer = lazyCachedFunction(async () => { // Load client manifest const clientManifest = await getClientManifest() if (!clientManifest) { throw new Error('client.manifest is not available') } @@ -61,20 +61,23 @@ const _getSSRRenderer = async () => { if (!createSSRApp) { throw new Error('Server bundle is not available') } // Create renderer - const renderToString = async (input, context) => { - const html = await _renderToString(input, context) - return `
${html}
` - } - return createRenderer(createSSRApp, { + const renderer = createRenderer(createSSRApp, { clientManifest, renderToString, publicPath: buildAssetsURL() }) -} -const getSSRRenderer = process.env.NUXT_VITE_NODE_OPTIONS - ? _getSSRRenderer // Do not cache in development - : lazyCachedFunction(_getSSRRenderer) + async function renderToString (input, context) { + const html = await _renderToString(input, context) + // In development with vite-node, the manifest is on-demand and will be available after rendering + if (process.env.NUXT_VITE_NODE_OPTIONS) { + renderer.rendererContext.updateManifest(await getClientManifest()) + } + return `
${html}
` + } + + return renderer +}) // -- SPA Renderer -- const getSPARenderer = lazyCachedFunction(async () => { From bf865c9d0ff78f5dd67767b9ca7bc3e95e7af077 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Fri, 10 Jun 2022 20:03:55 +0800 Subject: [PATCH 4/5] chore: update package --- packages/nuxt/package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index f6d60508182..0cbe3e2d377 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -66,7 +66,7 @@ "unplugin": "^0.7.0", "untyped": "^0.4.4", "vue": "^3.2.37", - "vue-bundle-renderer": "^0.3.8", + "vue-bundle-renderer": "^0.3.9", "vue-router": "^4.0.16" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index e1a85582980..d7454eb3205 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10209,7 +10209,7 @@ __metadata: unplugin: ^0.7.0 untyped: ^0.4.4 vue: ^3.2.37 - vue-bundle-renderer: ^0.3.8 + vue-bundle-renderer: ^0.3.9 vue-meta: next vue-router: ^4.0.16 bin: @@ -13673,12 +13673,12 @@ __metadata: languageName: node linkType: hard -"vue-bundle-renderer@npm:^0.3.8": - version: 0.3.8 - resolution: "vue-bundle-renderer@npm:0.3.8" +"vue-bundle-renderer@npm:^0.3.9": + version: 0.3.9 + resolution: "vue-bundle-renderer@npm:0.3.9" dependencies: bundle-runner: ^0.0.1 - checksum: f1cc37913369786e60db6cffcda3f016cb073301db765128cddebdcf8367b50a7525e47b60924788def443f3183b92bcfc72ad248ce28d3fed19ef092ae8b662 + checksum: 647ade1068533bd11c791608da9571f6125de9cd2c31cc26c6d7eb579b695558e7574979057d2a9ebbbcd600686516b6f9d222a99afc604936202d87bc4dbaa6 languageName: node linkType: hard From dfa8d65baf563535d4d1275acf0a70020d3e79d9 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Sat, 11 Jun 2022 04:16:22 +0800 Subject: [PATCH 5/5] Update packages/nuxt/src/core/runtime/nitro/renderer.ts Co-authored-by: pooya parsa --- packages/nuxt/src/core/runtime/nitro/renderer.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/nuxt/src/core/runtime/nitro/renderer.ts b/packages/nuxt/src/core/runtime/nitro/renderer.ts index 33386d17b04..085e5564c22 100644 --- a/packages/nuxt/src/core/runtime/nitro/renderer.ts +++ b/packages/nuxt/src/core/runtime/nitro/renderer.ts @@ -57,7 +57,7 @@ const getSSRRenderer = lazyCachedFunction(async () => { async function renderToString (input, context) { const html = await _renderToString(input, context) // In development with vite-node, the manifest is on-demand and will be available after rendering - if (process.env.NUXT_VITE_NODE_OPTIONS) { + if (process.dev && process.env.NUXT_VITE_NODE_OPTIONS) { renderer.rendererContext.updateManifest(await getClientManifest()) } return `
${html}
`