Skip to content

fix: keep repeated config resolution idempotent - #23208

Open
teamleaderleo wants to merge 4 commits into
vitejs:mainfrom
teamleaderleo:submit/config-resolve-idempotence
Open

fix: keep repeated config resolution idempotent#23208
teamleaderleo wants to merge 4 commits into
vitejs:mainfrom
teamleaderleo:submit/config-resolve-idempotence

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Aug 8, 2026

Copy link
Copy Markdown
Contributor

What’s happening?

Calling resolveConfig() more than once with the same inline config can duplicate options added to an environment during the previous resolution.

For example, an inline config containing one optimizer plugin currently produces:

first resolve:  1 plugin
second resolve: 2 plugins

We encountered this during a server restart, where the duplicated plugin changed the dependency optimizer config hash and caused an otherwise warm cache to be rebuilt.

The first resolution adds the resolved client environment to the inline config. When that same config is resolved again, the top-level optimizer options are merged into the existing client environment a second time, concatenating the plugin arrays.

What changes?

This change creates a shallow copy of the config and its existing environment objects before Vite applies resolver-generated environment defaults.

The resolved environment state therefore stays local to that resolution instead of affecting a later call with the same inline config.

Tests

Added a regression that resolves the same inline config twice and verifies that both results contain one optimizer plugin.

pnpm test-unit packages/vite/src/node/__tests__/config.spec.ts

btea
btea previously approved these changes Aug 9, 2026
Comment thread packages/vite/src/node/__tests__/configResolveIdempotence.spec.ts Outdated
Comment thread packages/vite/src/node/__tests__/config.spec.ts
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants