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') +})