From 513287aeb63f8a729ab818d7cda6055702fd67c2 Mon Sep 17 00:00:00 2001 From: arlo Date: Tue, 4 Aug 2026 22:10:01 +0800 Subject: [PATCH] fix(core): define Vue feature flags for non-Vue hosts --- .../node/plugins/__tests__/injection.test.ts | 36 +++++++++++++++++++ packages/core/src/node/plugins/injection.ts | 9 +++++ 2 files changed, 45 insertions(+) create mode 100644 packages/core/src/node/plugins/__tests__/injection.test.ts diff --git a/packages/core/src/node/plugins/__tests__/injection.test.ts b/packages/core/src/node/plugins/__tests__/injection.test.ts new file mode 100644 index 000000000..87f4a8839 --- /dev/null +++ b/packages/core/src/node/plugins/__tests__/injection.test.ts @@ -0,0 +1,36 @@ +import { resolveConfig } from 'vite' +import { describe, expect, it } from 'vitest' +import { DevToolsInjection } from '../injection' + +describe('devToolsInjection', () => { + it('defines Vue feature flags for non-Vue hosts', async () => { + const config = await resolveConfig({ + configFile: false, + plugins: [DevToolsInjection()], + }, 'serve') + + expect(config.define).toMatchObject({ + __VUE_OPTIONS_API__: true, + __VUE_PROD_DEVTOOLS__: false, + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: false, + }) + }) + + it('preserves Vue feature flags defined by the host', async () => { + const config = await resolveConfig({ + configFile: false, + define: { + __VUE_OPTIONS_API__: 'false', + __VUE_PROD_DEVTOOLS__: 'true', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true', + }, + plugins: [DevToolsInjection()], + }, 'serve') + + expect(config.define).toMatchObject({ + __VUE_OPTIONS_API__: 'false', + __VUE_PROD_DEVTOOLS__: 'true', + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: 'true', + }) + }) +}) diff --git a/packages/core/src/node/plugins/injection.ts b/packages/core/src/node/plugins/injection.ts index d2e0ece15..3a7e98c41 100644 --- a/packages/core/src/node/plugins/injection.ts +++ b/packages/core/src/node/plugins/injection.ts @@ -63,6 +63,15 @@ export function DevToolsInjection(options: DevToolsInjectionOptions = {}): Plugi apply(_config, env) { return env.command === 'serve' && !env.isSsrBuild }, + config(config) { + return { + define: { + __VUE_OPTIONS_API__: config.define?.__VUE_OPTIONS_API__ ?? true, + __VUE_PROD_DEVTOOLS__: config.define?.__VUE_PROD_DEVTOOLS__ ?? false, + __VUE_PROD_HYDRATION_MISMATCH_DETAILS__: config.define?.__VUE_PROD_HYDRATION_MISMATCH_DETAILS__ ?? false, + }, + } + }, configResolved(config) { root = config.root },