Skip to content

Commit fa76f61

Browse files
committed
feat: disable minify by default in development
1 parent e741abe commit fa76f61

File tree

3 files changed

+44
-32
lines changed

3 files changed

+44
-32
lines changed

packages/vite/src/node/__tests__/build.spec.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { fileURLToPath } from 'node:url'
33
import { stripVTControlCharacters } from 'node:util'
44
import fsp from 'node:fs/promises'
55
import colors from 'picocolors'
6-
import { afterEach, describe, expect, test, vi } from 'vitest'
6+
import { afterEach, describe, expect, onTestFinished, test, vi } from 'vitest'
77
import type {
88
LogLevel,
99
OutputChunk,
@@ -809,6 +809,13 @@ test('default sharedConfigBuild true on build api', async () => {
809809
test.for([true, false])(
810810
'minify per environment (builder.sharedPlugins: %s)',
811811
async (sharedPlugins) => {
812+
const _nodeEnv = process.env.NODE_ENV
813+
// Overriding the NODE_ENV set by vitest
814+
process.env.NODE_ENV = ''
815+
onTestFinished(() => {
816+
process.env.NODE_ENV = _nodeEnv
817+
})
818+
812819
const root = resolve(__dirname, 'fixtures/shared-plugins/minify')
813820
const builder = await createBuilder({
814821
root,

packages/vite/src/node/build.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -402,6 +402,7 @@ export function resolveBuildEnvironmentOptions(
402402
raw: BuildEnvironmentOptions,
403403
logger: Logger,
404404
consumer: 'client' | 'server' | undefined,
405+
isProduction: boolean,
405406
): ResolvedBuildEnvironmentOptions {
406407
const deprecatedPolyfillModulePreload = raw.polyfillModulePreload
407408
const { polyfillModulePreload, ...rest } = raw
@@ -422,7 +423,7 @@ export function resolveBuildEnvironmentOptions(
422423
{
423424
...buildEnvironmentOptionsDefaults,
424425
cssCodeSplit: !raw.lib,
425-
minify: consumer === 'server' ? false : 'oxc',
426+
minify: !isProduction || consumer === 'server' ? false : 'oxc',
426427
rollupOptions: {
427428
platform: consumer === 'server' ? 'node' : 'browser',
428429
},

packages/vite/src/node/config.ts

Lines changed: 34 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -822,6 +822,7 @@ function resolveEnvironmentOptions(
822822
preserveSymlinks: boolean,
823823
forceOptimizeDeps: boolean | undefined,
824824
logger: Logger,
825+
isProduction: boolean,
825826
environmentName: string,
826827
// Backward compatibility
827828
skipSsrTransform?: boolean,
@@ -887,6 +888,7 @@ function resolveEnvironmentOptions(
887888
options.build ?? {},
888889
logger,
889890
consumer,
891+
isProduction,
890892
),
891893
// will be set by `setOptimizeDepsPluginNames` later
892894
optimizeDepsPluginNames: undefined!,
@@ -1445,6 +1447,36 @@ export async function resolveConfig(
14451447
config.ssr?.target === 'webworker',
14461448
)
14471449

1450+
// load .env files
1451+
// Backward compatibility: set envDir to false when envFile is false
1452+
let envDir = config.envFile === false ? false : config.envDir
1453+
if (envDir !== false) {
1454+
envDir = config.envDir
1455+
? normalizePath(path.resolve(resolvedRoot, config.envDir))
1456+
: resolvedRoot
1457+
}
1458+
1459+
const userEnv = loadEnv(mode, envDir, resolveEnvPrefix(config))
1460+
1461+
// Note it is possible for user to have a custom mode, e.g. `staging` where
1462+
// development-like behavior is expected. This is indicated by NODE_ENV=development
1463+
// loaded from `.staging.env` and set by us as VITE_USER_NODE_ENV
1464+
const userNodeEnv = process.env.VITE_USER_NODE_ENV
1465+
if (!isNodeEnvSet && userNodeEnv) {
1466+
if (userNodeEnv === 'development') {
1467+
process.env.NODE_ENV = 'development'
1468+
} else {
1469+
// NODE_ENV=production is not supported as it could break HMR in dev for frameworks like Vue
1470+
logger.warn(
1471+
`NODE_ENV=${userNodeEnv} is not supported in the .env file. ` +
1472+
`Only NODE_ENV=development is supported to create a development build of your project. ` +
1473+
`If you need to set process.env.NODE_ENV, you can set it in the Vite config instead.`,
1474+
)
1475+
}
1476+
}
1477+
1478+
const isProduction = process.env.NODE_ENV === 'production'
1479+
14481480
// Backward compatibility: merge config.environments.client.resolve back into config.resolve
14491481
config.resolve ??= {}
14501482
config.resolve.conditions = config.environments.client.resolve?.conditions
@@ -1460,6 +1492,7 @@ export async function resolveConfig(
14601492
resolvedDefaultResolve.preserveSymlinks,
14611493
inlineConfig.forceOptimizeDeps,
14621494
logger,
1495+
isProduction,
14631496
environmentName,
14641497
config.experimental?.skipSsrTransform,
14651498
config.ssr?.target === 'webworker',
@@ -1485,6 +1518,7 @@ export async function resolveConfig(
14851518
config.build ?? {},
14861519
logger,
14871520
undefined,
1521+
isProduction,
14881522
)
14891523

14901524
// Backward compatibility: merge config.environments.ssr back into config.ssr
@@ -1505,36 +1539,6 @@ export async function resolveConfig(
15051539
resolvedDefaultResolve.preserveSymlinks,
15061540
)
15071541

1508-
// load .env files
1509-
// Backward compatibility: set envDir to false when envFile is false
1510-
let envDir = config.envFile === false ? false : config.envDir
1511-
if (envDir !== false) {
1512-
envDir = config.envDir
1513-
? normalizePath(path.resolve(resolvedRoot, config.envDir))
1514-
: resolvedRoot
1515-
}
1516-
1517-
const userEnv = loadEnv(mode, envDir, resolveEnvPrefix(config))
1518-
1519-
// Note it is possible for user to have a custom mode, e.g. `staging` where
1520-
// development-like behavior is expected. This is indicated by NODE_ENV=development
1521-
// loaded from `.staging.env` and set by us as VITE_USER_NODE_ENV
1522-
const userNodeEnv = process.env.VITE_USER_NODE_ENV
1523-
if (!isNodeEnvSet && userNodeEnv) {
1524-
if (userNodeEnv === 'development') {
1525-
process.env.NODE_ENV = 'development'
1526-
} else {
1527-
// NODE_ENV=production is not supported as it could break HMR in dev for frameworks like Vue
1528-
logger.warn(
1529-
`NODE_ENV=${userNodeEnv} is not supported in the .env file. ` +
1530-
`Only NODE_ENV=development is supported to create a development build of your project. ` +
1531-
`If you need to set process.env.NODE_ENV, you can set it in the Vite config instead.`,
1532-
)
1533-
}
1534-
}
1535-
1536-
const isProduction = process.env.NODE_ENV === 'production'
1537-
15381542
// resolve public base url
15391543
const relativeBaseShortcut = config.base === '' || config.base === './'
15401544

0 commit comments

Comments
 (0)