diff --git a/packages/vite/src/node/__tests__/config.spec.ts b/packages/vite/src/node/__tests__/config.spec.ts index b32960497e3af4..0b8aaf79e6d47c 100644 --- a/packages/vite/src/node/__tests__/config.spec.ts +++ b/packages/vite/src/node/__tests__/config.spec.ts @@ -1,6 +1,6 @@ import { describe, expect, test } from 'vitest' import type { InlineConfig } from '..' -import type { UserConfig, UserConfigExport } from '../config' +import type { PluginOption, UserConfig, UserConfigExport } from '../config' import { resolveConfig } from '../config' import { resolveEnvPrefix } from '../env' import { mergeConfig } from '../publicUtils' @@ -266,3 +266,51 @@ describe('preview config', () => { }) }) }) + +describe('resolveConfig', () => { + const keepScreenMergePlugin = (): PluginOption => { + return { + name: 'vite-plugin-keep-screen-merge', + config() { + return { clearScreen: false } + } + } + } + + const keepScreenOverridePlugin = (): PluginOption => { + return { + name: 'vite-plugin-keep-screen-override', + config(config) { + config.clearScreen = false + } + } + } + + test('plugin merges `clearScreen` option', async () => { + const config1: InlineConfig = { plugins: [keepScreenMergePlugin()] } + const config2: InlineConfig = { + plugins: [keepScreenMergePlugin()], + clearScreen: true + } + + const results1 = await resolveConfig(config1, 'build') + const results2 = await resolveConfig(config2, 'build') + + expect(results1.clearScreen).toBe(false) + expect(results2.clearScreen).toBe(false) + }) + + test('plugin overrides `clearScreen` option', async () => { + const config1: InlineConfig = { plugins: [keepScreenOverridePlugin()] } + const config2: InlineConfig = { + plugins: [keepScreenOverridePlugin()], + clearScreen: true + } + + const results1 = await resolveConfig(config1, 'build') + const results2 = await resolveConfig(config2, 'build') + + expect(results1.clearScreen).toBe(false) + expect(results2.clearScreen).toBe(false) + }) +}) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 0019cc0ddebe2a..654830ded4ea67 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -408,12 +408,6 @@ export async function resolveConfig( } } - // Define logger - const logger = createLogger(config.logLevel, { - allowClearScreen: config.clearScreen, - customLogger: config.customLogger - }) - // user config may provide an alternative mode. But --mode has a higher priority mode = inlineConfig.mode || config.mode || mode configEnv.mode = mode @@ -457,6 +451,12 @@ export async function resolveConfig( config.build.commonjsOptions = { include: [] } } + // Define logger + const logger = createLogger(config.logLevel, { + allowClearScreen: config.clearScreen, + customLogger: config.customLogger + }) + // resolve root const resolvedRoot = normalizePath( config.root ? path.resolve(config.root) : process.cwd()