From 2ce29d5fa758046e5453bd92b8ed6c9da9709bb5 Mon Sep 17 00:00:00 2001 From: im10furry <135334060+im10furry@users.noreply.github.com> Date: Fri, 11 Sep 2026 09:19:32 -0400 Subject: [PATCH] fix: warn when deprecated `deps.optimizer.web` is used (#11214) --- .../vitest/src/node/config/resolveConfig.ts | 9 +++ test/e2e/test/cache.test.ts | 2 +- test/e2e/test/config/deps-optimizer.test.ts | 57 +++++++++++++++++++ 3 files changed, 67 insertions(+), 1 deletion(-) create mode 100644 test/e2e/test/config/deps-optimizer.test.ts diff --git a/packages/vitest/src/node/config/resolveConfig.ts b/packages/vitest/src/node/config/resolveConfig.ts index 8e826edd8..1b9703369 100644 --- a/packages/vitest/src/node/config/resolveConfig.ts +++ b/packages/vitest/src/node/config/resolveConfig.ts @@ -557,6 +557,15 @@ export function resolveTestConfig( resolved.deps.moduleDirectories ??= [] resolved.deps.optimizer ??= {} + // `deps.optimizer` is keyed by Vite environment name, so `web` is a valid + // key when the user declares that environment themselves + // (`vite.environments.web`) - only the Vitest 3 alias for `client` is + // silently ignored + if (resolved.deps.optimizer.web && !viteConfig.environments.web) { + logger.deprecate( + '`deps.optimizer.web` is deprecated. Use `deps.optimizer.client` instead (or `deps.optimizer.ssr` for `node` and `edge` environments).', + ) + } resolved.deps.optimizer.ssr ??= {} resolved.deps.optimizer.ssr.enabled ??= false resolved.deps.optimizer.client ??= {} diff --git a/test/e2e/test/cache.test.ts b/test/e2e/test/cache.test.ts index 61e9ac60d..baddb61ef 100644 --- a/test/e2e/test/cache.test.ts +++ b/test/e2e/test/cache.test.ts @@ -89,7 +89,7 @@ test('preserves previous test results', async () => { describe('with optimizer enabled', () => { const deps = { optimizer: { - web: { + client: { enabled: true, }, }, diff --git a/test/e2e/test/config/deps-optimizer.test.ts b/test/e2e/test/config/deps-optimizer.test.ts new file mode 100644 index 000000000..8d4085801 --- /dev/null +++ b/test/e2e/test/config/deps-optimizer.test.ts @@ -0,0 +1,57 @@ +import { expect, test } from 'vitest' +import { resolveTestConfig, runInlineTests } from '../../../test-utils' + +test('deps.optimizer.web is deprecated in favour of deps.optimizer.client', async () => { + const { stderr } = await runInlineTests( + { 'basic.test.ts': 'test("passes", () => {})' }, + { + deps: { + optimizer: { + web: { enabled: true }, + }, + }, + }, + ) + expect(stderr).toContain('`deps.optimizer.web` is deprecated') + expect(stderr).toContain('Use `deps.optimizer.client` instead') +}) + +test('deps.optimizer.client is not deprecated', async () => { + const { stderr } = await runInlineTests( + { 'basic.test.ts': 'test("passes", () => {})' }, + { + deps: { + optimizer: { + client: { enabled: false }, + }, + }, + }, + ) + expect(stderr).not.toContain('`deps.optimizer.web` is deprecated') +}) + +test('deps.optimizer.web is deprecated only without a `web` environment', async () => { + // `deps.optimizer` is keyed by Vite environment name, so `web` is a valid key + // when the user declares that environment themselves - only the Vitest 3 + // alias for `client` is silently ignored + const web = { enabled: true } + + const withoutEnvironment = await resolveTestConfig({ + deps: { + optimizer: { web }, + }, + }) + expect(withoutEnvironment.stderr).toContain('`deps.optimizer.web` is deprecated') + + const withEnvironment = await resolveTestConfig({ + deps: { + optimizer: { web }, + }, + $viteConfig: { + environments: { + web: {}, + }, + }, + }) + expect(withEnvironment.stderr).not.toContain('`deps.optimizer.web` is deprecated') +}) -- 2.51.2