diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts index cf224a24f87d0c..17534e63f3c6c4 100644 --- a/packages/vite/src/node/__tests__/config.spec.ts +++ b/packages/vite/src/node/__tests__/config.spec.ts @@ -669,6 +669,26 @@ describe('mergeConfig', () => { ).toBe('browser') }) + test('resolved build options keep rollupOptions as a live proxy of rolldownOptions', async () => { + const config = await resolveConfig({}, 'serve') + + for (const build of [ + config.build, + config.environments.client.build, + config.environments.ssr.build, + ]) { + // Reassigning `rolldownOptions` must be reflected through the `rollupOptions` getter. + const newOptions = { treeshake: false } + build.rolldownOptions = newOptions + expect(build.rollupOptions).toBe(newOptions) + + // Assigning through `rollupOptions` must update `rolldownOptions` too. + const newerOptions = { treeshake: true } + build.rollupOptions = newerOptions + expect(build.rolldownOptions).toBe(newerOptions) + } + }) + test('syncs `server.hmr.*` to `server.ws.*`', () => { const baseConfig = defineConfig({ server: { diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 4d4b3e49d74449..ef104f89880010 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -505,6 +505,9 @@ export function resolveBuildEnvironmentOptions( ...merged.modulePreload, }, } + // The object spread above evaluates the `rollupOptions` getter set up on + // `merged` and copies it as a plain data property. + setupRollupOptionCompat(resolved, 'build') return resolved }