Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion packages/vite/src/node/__tests__/config.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1654,7 +1654,6 @@ describe('loadConfigFromFile', () => {
root,
undefined,
logger,
'bundle',
)
const messages = warn.mock.calls.map((c) =>
stripVTControlCharacters(c[0]),
Expand All @@ -1675,6 +1674,24 @@ describe('loadConfigFromFile', () => {
`)
})

test('does not warn when an explicit non-native loader is used', async () => {
const logger = createLogger('info')
const warn = vi.spyOn(logger, 'warn').mockImplementation(() => {})
const root = path.resolve(compatRoot, 'dirname')
await loadConfigFromFile(
{} as any,
path.resolve(root, 'vite.config.js'),
root,
undefined,
logger,
'bundle',
)
const messages = warn.mock.calls.map((c) =>
stripVTControlCharacters(c[0]),
)
expect(messages).toEqual([])
})

// uses a `.ts` config with TypeScript-only syntax; skipped on Node
// versions without type stripping support
test.skipIf(!supportsTypeStripping)(
Expand Down
25 changes: 17 additions & 8 deletions packages/vite/src/node/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2370,21 +2370,27 @@ export async function loadConfigFromFile(
configRoot: string = process.cwd(),
logLevel?: LogLevel,
customLogger?: Logger,
configLoader: 'bundle' | 'runner' | 'native' = 'bundle',
configLoader?: 'bundle' | 'runner' | 'native',
): Promise<{
path: string
config: UserConfig
dependencies: string[]
} | null> {
// Only surface native-loader compatibility warnings when the loader was not
// chosen explicitly: users who deliberately picked a bundler have already
// opted out of the native loader.
const resolvedConfigLoader = configLoader ?? 'bundle'

if (
configLoader !== 'bundle' &&
configLoader !== 'runner' &&
configLoader !== 'native'
resolvedConfigLoader !== 'bundle' &&
resolvedConfigLoader !== 'runner' &&
resolvedConfigLoader !== 'native'
) {
throw new Error(
`Unsupported configLoader: ${configLoader}. Accepted values are 'bundle', 'runner', and 'native'.`,
`Unsupported configLoader: ${resolvedConfigLoader}. Accepted values are 'bundle', 'runner', and 'native'.`,
)
}
const warnNativeCompat = configLoader === undefined

const start = performance.now()
const getTime = () => `${(performance.now() - start).toFixed(2)}ms`
Expand Down Expand Up @@ -2412,14 +2418,16 @@ export async function loadConfigFromFile(
}

try {
const { configExport, dependencies } = await (configLoader === 'bundle'
const { configExport, dependencies } = await (resolvedConfigLoader ===
'bundle'
? bundleAndLoadConfigFile(
resolvedPath,
configRoot,
logLevel,
customLogger,
warnNativeCompat,
)
: configLoader === 'runner'
: resolvedConfigLoader === 'runner'
? runnerImportConfigFile(resolvedPath)
: nativeImportConfigFile(resolvedPath))
debug?.(`config file loaded in ${getTime()}`)
Expand Down Expand Up @@ -2480,6 +2488,7 @@ async function bundleAndLoadConfigFile(
configRoot: string,
logLevel: LogLevel | undefined,
customLogger: Logger | undefined,
warnNativeCompat: boolean,
) {
const isESM =
typeof process.versions.deno === 'string' || isFilePathESM(resolvedPath)
Expand All @@ -2491,7 +2500,7 @@ async function bundleAndLoadConfigFile(
isESM,
)

if (bundled.nativeIncompatibilities.length > 0) {
if (warnNativeCompat && bundled.nativeIncompatibilities.length > 0) {
const logger = createLogger(logLevel, { customLogger })
logger.warn(
formatNativeConfigIncompatWarning(
Expand Down
Loading