diff --git a/packages/playground/optimize-deps/.env b/packages/playground/optimize-deps/.env
new file mode 100644
index 00000000000000..995fca4af2ee24
--- /dev/null
+++ b/packages/playground/optimize-deps/.env
@@ -0,0 +1 @@
+NODE_ENV=production
\ No newline at end of file
diff --git a/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts b/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts
index d95a6d984cd9aa..e832408370969a 100644
--- a/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts
+++ b/packages/playground/optimize-deps/__tests__/optimize-deps.spec.ts
@@ -62,6 +62,10 @@ test('import * from optimized dep', async () => {
expect(await page.textContent('.import-star')).toMatch(`[success]`)
})
+test('import from dep with process.env.NODE_ENV', async () => {
+ expect(await page.textContent('.node-env')).toMatch(`prod`)
+})
+
test('import from dep with .notjs files', async () => {
expect(await page.textContent('.not-js')).toMatch(`[success]`)
})
diff --git a/packages/playground/optimize-deps/dep-node-env/index.js b/packages/playground/optimize-deps/dep-node-env/index.js
new file mode 100644
index 00000000000000..8548c37894539f
--- /dev/null
+++ b/packages/playground/optimize-deps/dep-node-env/index.js
@@ -0,0 +1 @@
+export const env = process.env.NODE_ENV === 'production' ? 'prod' : 'dev'
diff --git a/packages/playground/optimize-deps/dep-node-env/package.json b/packages/playground/optimize-deps/dep-node-env/package.json
new file mode 100644
index 00000000000000..59a00fb153c522
--- /dev/null
+++ b/packages/playground/optimize-deps/dep-node-env/package.json
@@ -0,0 +1,5 @@
+{
+ "name": "dep-node-env",
+ "private": true,
+ "version": "1.0.0"
+}
diff --git a/packages/playground/optimize-deps/index.html b/packages/playground/optimize-deps/index.html
index 2be896d00acba9..521d54379863d9 100644
--- a/packages/playground/optimize-deps/index.html
+++ b/packages/playground/optimize-deps/index.html
@@ -38,6 +38,9 @@
Optimizing force included dep even when it's linked
import * as ...
+Import from dependency with process.env.NODE_ENV
+
+
Import from dependency with .notjs files
@@ -88,6 +91,9 @@ Reused variable names
text('.import-star', `[success] ${keys.join(', ')}`)
}
+ import { env } from 'dep-node-env'
+ text('.node-env', env)
+
import { notjsValue } from 'dep-not-js'
text('.not-js', notjsValue)
diff --git a/packages/playground/optimize-deps/package.json b/packages/playground/optimize-deps/package.json
index 2752e691da6fb2..904db5fc65f0ad 100644
--- a/packages/playground/optimize-deps/package.json
+++ b/packages/playground/optimize-deps/package.json
@@ -17,6 +17,7 @@
"dep-esbuild-plugin-transform": "file:./dep-esbuild-plugin-transform",
"dep-linked": "link:./dep-linked",
"dep-linked-include": "link:./dep-linked-include",
+ "dep-node-env": "file:./dep-node-env",
"dep-not-js": "file:./dep-not-js",
"dep-with-dynamic-import": "file:./dep-with-dynamic-import",
"lodash-es": "^4.17.21",
diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts
index 88c41801938b98..e574e21b718e41 100644
--- a/packages/vite/src/node/optimizer/index.ts
+++ b/packages/vite/src/node/optimizer/index.ts
@@ -438,7 +438,7 @@ export async function runOptimizeDeps(
}
const define: Record = {
- 'process.env.NODE_ENV': JSON.stringify(config.mode)
+ 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode)
}
for (const key in config.define) {
const value = config.define[key]
@@ -783,7 +783,7 @@ export function getDepHash(config: ResolvedConfig): string {
// only a subset of config options that can affect dep optimization
content += JSON.stringify(
{
- mode: config.mode,
+ mode: process.env.NODE_ENV || config.mode,
root: config.root,
define: config.define,
resolve: config.resolve,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a54c2eadfcfff2..bfe93616d61729 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -317,6 +317,7 @@ importers:
dep-esbuild-plugin-transform: file:./dep-esbuild-plugin-transform
dep-linked: link:./dep-linked
dep-linked-include: link:./dep-linked-include
+ dep-node-env: file:./dep-node-env
dep-not-js: file:./dep-not-js
dep-with-dynamic-import: file:./dep-with-dynamic-import
lodash-es: ^4.17.21
@@ -336,6 +337,7 @@ importers:
dep-esbuild-plugin-transform: link:dep-esbuild-plugin-transform
dep-linked: link:dep-linked
dep-linked-include: link:dep-linked-include
+ dep-node-env: link:dep-node-env
dep-not-js: link:dep-not-js
dep-with-dynamic-import: link:dep-with-dynamic-import
lodash-es: 4.17.21
@@ -371,6 +373,9 @@ importers:
dependencies:
react: 17.0.2
+ packages/playground/optimize-deps/dep-node-env:
+ specifiers: {}
+
packages/playground/optimize-deps/dep-not-js:
specifiers: {}