From b6c8cdf4cb1bc4b00341ec01420ecf808ee21e6e Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 17 Sep 2025 18:20:24 +0900 Subject: [PATCH 1/4] fix(build): fix ssr environment emitAssets with sharedConfigBuild --- .../vite/src/node/__tests__/build.spec.ts | 46 +++++++++++++++++++ .../fixtures/shared-config-build/entry.js | 1 + packages/vite/src/node/config.ts | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts index f36811178cc238..ec64ff9d84aded 100644 --- a/packages/vite/src/node/__tests__/build.spec.ts +++ b/packages/vite/src/node/__tests__/build.spec.ts @@ -865,6 +865,52 @@ test.for([true, false])( }, ) +test('sharedConfigBuild and emitAssets', async () => { + const builder = await createBuilder({ + root: resolve(__dirname, 'fixtures/shared-config-build'), + logLevel: 'warn', + configFile: false, + environments: { + client: { + build: { + outDir: './dist/client', + emitAssets: true, + rollupOptions: { + input: '/entry.js', + }, + }, + }, + ssr: { + build: { + outDir: './dist/ssr', + emitAssets: true, + rollupOptions: { + input: '/entry.js', + }, + }, + }, + custom: { + build: { + outDir: './dist/custom', + emitAssets: true, + rollupOptions: { + input: '/entry.js', + }, + }, + }, + }, + builder: { + sharedConfigBuild: true, + }, + }) + + expect([ + builder.environments.client.config.build.emitAssets, + builder.environments.ssr.config.build.emitAssets, + builder.environments.custom.config.build.emitAssets, + ]).toEqual([true, true, true]) +}) + test('adjust worker build error for worker.format', async () => { try { await build({ diff --git a/packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js b/packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js new file mode 100644 index 00000000000000..6ab3f4075f08f9 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js @@ -0,0 +1 @@ +console.log('entry') diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 50caa48b3fae48..d3aacedbfa4a65 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -1659,7 +1659,7 @@ export async function resolveConfig( // For backward compat, set ssr environment build.emitAssets with the same value as build.ssrEmitAssets that might be changed in configResolved hook // https://github.com/vikejs/vike/blob/953614cea7b418fcc0309b5c918491889fdec90a/vike/node/plugin/plugins/buildConfig.ts#L67 if (resolved.environments.ssr) { - resolved.environments.ssr.build.emitAssets = + resolved.environments.ssr.build.emitAssets ||= resolved.build.ssrEmitAssets || resolved.build.emitAssets } From b80320e0ef09879e11312657f2853c652305d221 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 17 Sep 2025 18:36:36 +0900 Subject: [PATCH 2/4] test: actually build --- .../vite/src/node/__tests__/build.spec.ts | 31 ++++++++++++++++++- .../{ => emitAssets}/entry.js | 1 + .../shared-config-build/emitAssets/test.css | 3 ++ 3 files changed, 34 insertions(+), 1 deletion(-) rename packages/vite/src/node/__tests__/fixtures/shared-config-build/{ => emitAssets}/entry.js (51%) create mode 100644 packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/test.css diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts index ec64ff9d84aded..6070f3d9cd3a20 100644 --- a/packages/vite/src/node/__tests__/build.spec.ts +++ b/packages/vite/src/node/__tests__/build.spec.ts @@ -866,8 +866,9 @@ test.for([true, false])( ) test('sharedConfigBuild and emitAssets', async () => { + const root = resolve(__dirname, 'fixtures/shared-config-build/emitAssets') const builder = await createBuilder({ - root: resolve(__dirname, 'fixtures/shared-config-build'), + root, logLevel: 'warn', configFile: false, environments: { @@ -909,6 +910,34 @@ test('sharedConfigBuild and emitAssets', async () => { builder.environments.ssr.config.build.emitAssets, builder.environments.custom.config.build.emitAssets, ]).toEqual([true, true, true]) + + await builder.buildApp() + + expect( + await Promise.all([ + fsp.readdir( + resolve( + root, + builder.environments.client.config.build.outDir, + 'assets', + ), + ), + fsp.readdir( + resolve(root, builder.environments.ssr.config.build.outDir, 'assets'), + ), + fsp.readdir( + resolve( + root, + builder.environments.custom.config.build.outDir, + 'assets', + ), + ), + ]), + ).toEqual([ + expect.arrayContaining([expect.stringMatching(/\.css$/)]), + expect.arrayContaining([expect.stringMatching(/\.css$/)]), + expect.arrayContaining([expect.stringMatching(/\.css$/)]), + ]) }) test('adjust worker build error for worker.format', async () => { diff --git a/packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js b/packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/entry.js similarity index 51% rename from packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js rename to packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/entry.js index 6ab3f4075f08f9..ff0325f1ba5e14 100644 --- a/packages/vite/src/node/__tests__/fixtures/shared-config-build/entry.js +++ b/packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/entry.js @@ -1 +1,2 @@ +import './test.css' console.log('entry') diff --git a/packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/test.css b/packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/test.css new file mode 100644 index 00000000000000..7f69ee73360cb2 --- /dev/null +++ b/packages/vite/src/node/__tests__/fixtures/shared-config-build/emitAssets/test.css @@ -0,0 +1,3 @@ +body { + color: orange; +} From d42c470e6bf7efc34c19fe22b7541b4d5c86e732 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Wed, 17 Sep 2025 18:38:22 +0900 Subject: [PATCH 3/4] test: cleanup --- .../vite/src/node/__tests__/build.spec.ts | 36 ++++++++----------- 1 file changed, 14 insertions(+), 22 deletions(-) diff --git a/packages/vite/src/node/__tests__/build.spec.ts b/packages/vite/src/node/__tests__/build.spec.ts index 6070f3d9cd3a20..0c2edac753fdff 100644 --- a/packages/vite/src/node/__tests__/build.spec.ts +++ b/packages/vite/src/node/__tests__/build.spec.ts @@ -905,34 +905,26 @@ test('sharedConfigBuild and emitAssets', async () => { }, }) - expect([ - builder.environments.client.config.build.emitAssets, - builder.environments.ssr.config.build.emitAssets, - builder.environments.custom.config.build.emitAssets, - ]).toEqual([true, true, true]) + expect( + ['client', 'ssr', 'custom'].map( + (name) => builder.environments[name].config.build.emitAssets, + ), + ).toEqual([true, true, true]) await builder.buildApp() expect( - await Promise.all([ - fsp.readdir( - resolve( - root, - builder.environments.client.config.build.outDir, - 'assets', - ), - ), - fsp.readdir( - resolve(root, builder.environments.ssr.config.build.outDir, 'assets'), - ), - fsp.readdir( - resolve( - root, - builder.environments.custom.config.build.outDir, - 'assets', + await Promise.all( + ['client', 'ssr', 'custom'].map((name) => + fsp.readdir( + resolve( + root, + builder.environments[name].config.build.outDir, + 'assets', + ), ), ), - ]), + ), ).toEqual([ expect.arrayContaining([expect.stringMatching(/\.css$/)]), expect.arrayContaining([expect.stringMatching(/\.css$/)]), From 7093dbac8873a376ad26337fb957d718ae2afa43 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Thu, 18 Sep 2025 14:27:24 +0900 Subject: [PATCH 4/4] fix: check sharedConfigBuild --- packages/vite/src/node/config.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index d3aacedbfa4a65..42e07c67ee9235 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -1658,8 +1658,8 @@ export async function resolveConfig( // For backward compat, set ssr environment build.emitAssets with the same value as build.ssrEmitAssets that might be changed in configResolved hook // https://github.com/vikejs/vike/blob/953614cea7b418fcc0309b5c918491889fdec90a/vike/node/plugin/plugins/buildConfig.ts#L67 - if (resolved.environments.ssr) { - resolved.environments.ssr.build.emitAssets ||= + if (!resolved.builder?.sharedConfigBuild && resolved.environments.ssr) { + resolved.environments.ssr.build.emitAssets = resolved.build.ssrEmitAssets || resolved.build.emitAssets }