diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 4bf85e654bb914..7cbe3dc189aeb3 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -1074,7 +1074,7 @@ async function bundleConfigFile( absWorkingDir: process.cwd(), entryPoints: [fileName], write: false, - target: ['node18'], + target: [`node${process.versions.node}`], platform: 'node', bundle: true, format: isESM ? 'esm' : 'cjs', diff --git a/playground/config/__tests__/config.spec.ts b/playground/config/__tests__/config.spec.ts index a95cf592130f0b..b4a665e87e41e8 100644 --- a/playground/config/__tests__/config.spec.ts +++ b/playground/config/__tests__/config.spec.ts @@ -2,6 +2,13 @@ import { resolve } from 'node:path' import { loadConfigFromFile } from 'vite' import { expect, it } from 'vitest' +const [nvMajor, nvMinor] = process.versions.node.split('.').map(Number) +const isImportAttributesSupported = + (nvMajor === 18 && nvMinor >= 20) || + // Node v19 doesn't support import attributes + (nvMajor === 20 && nvMinor >= 10) || + nvMajor >= 21 + it('loadConfigFromFile', async () => { const { config } = await loadConfigFromFile( {} as any, @@ -24,3 +31,19 @@ it('loadConfigFromFile', async () => { } `) }) + +it.runIf(isImportAttributesSupported)( + 'loadConfigFromFile with import attributes', + async () => { + const { config } = await loadConfigFromFile( + {} as any, + resolve(__dirname, '../packages/entry/vite.config.import-attributes.ts'), + resolve(__dirname, '../packages/entry'), + ) + expect(config).toMatchInlineSnapshot(` + { + "jsonValue": "vite", + } + `) + }, +) diff --git a/playground/config/packages/entry/vite.config.import-attributes.ts b/playground/config/packages/entry/vite.config.import-attributes.ts new file mode 100644 index 00000000000000..b6b63e3dd9c73b --- /dev/null +++ b/playground/config/packages/entry/vite.config.import-attributes.ts @@ -0,0 +1,6 @@ +// We have to import external json to prevent Vite / esbuild from bundling it. +import pkg from 'vite/package.json' with { type: 'json' } + +export default { + jsonValue: pkg.name, +}