Skip to content

Commit 8a6bb4e

Browse files
fix(optimizer): keep NODE_ENV as-is when keepProcessEnv is true (#18899)
Co-authored-by: Dario Piotrowicz <[email protected]>
1 parent 7d6dd5d commit 8a6bb4e

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

Diff for: packages/vite/src/node/optimizer/index.ts

+8-4
Original file line numberDiff line numberDiff line change
@@ -775,9 +775,11 @@ async function prepareEsbuildOptimizerRun(
775775
if (optimizerContext.cancelled) return { context: undefined, idToExports }
776776

777777
const define = {
778-
'process.env.NODE_ENV': JSON.stringify(
779-
process.env.NODE_ENV || environment.config.mode,
780-
),
778+
'process.env.NODE_ENV': environment.config.keepProcessEnv
779+
? // define process.env.NODE_ENV even for keepProcessEnv === true
780+
// as esbuild will replace it automatically when `platform` is `'browser'`
781+
'process.env.NODE_ENV'
782+
: JSON.stringify(process.env.NODE_ENV || environment.config.mode),
781783
}
782784

783785
const platform =
@@ -1210,7 +1212,9 @@ function getConfigHash(environment: Environment): string {
12101212
const { optimizeDeps } = config
12111213
const content = JSON.stringify(
12121214
{
1213-
mode: process.env.NODE_ENV || config.mode,
1215+
define: !config.keepProcessEnv
1216+
? process.env.NODE_ENV || config.mode
1217+
: null,
12141218
root: config.root,
12151219
resolve: config.resolve,
12161220
assetsInclude: config.assetsInclude,

Diff for: playground/environment-react-ssr/__tests__/environment-react-ssr.spec.ts

+13
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,19 @@ describe.runIf(!isBuild)('pre-bundling', () => {
3838
expect(metaJson.optimized['react/jsx-dev-runtime']).toBeTruthy()
3939

4040
expect(metaJson.optimized['react-dom/client']).toBeFalsy()
41+
42+
// process.env.NODE_ENV should be kept as keepProcessEnv is true
43+
const depsFiles = fs
44+
.readdirSync(path.resolve(testDir, 'node_modules/.vite/deps_ssr'), {
45+
withFileTypes: true,
46+
})
47+
.filter((file) => file.isFile() && file.name.endsWith('.js'))
48+
.map((file) => path.join(file.parentPath, file.name))
49+
const depsFilesWithProcessEnvNodeEnv = depsFiles.filter((file) =>
50+
fs.readFileSync(file, 'utf-8').includes('process.env.NODE_ENV'),
51+
)
52+
53+
expect(depsFilesWithProcessEnvNodeEnv.length).toBeGreaterThan(0)
4154
})
4255

4356
test('deps reload', async () => {

0 commit comments

Comments
 (0)