diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 8160ee0b0d83a0..f005a521a97a52 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -385,6 +385,7 @@ export async function runOptimizeDeps( resolvedConfig: ResolvedConfig, depsInfo: Record ): Promise { + const isBuild = resolvedConfig.command === 'build' const config: ResolvedConfig = { ...resolvedConfig, command: 'build' @@ -471,20 +472,15 @@ export async function runOptimizeDeps( flatIdToExports[flatId] = exportsData } - const define: Record = { - 'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV || config.mode) - } - for (const key in config.define) { - const value = config.define[key] - define[key] = typeof value === 'string' ? value : JSON.stringify(value) - } - const start = performance.now() const result = await build({ absWorkingDir: process.cwd(), entryPoints: Object.keys(flatIdDeps), bundle: true, + // Ensure resolution is handled by esbuildDepPlugin and + // avoid replacing `process.env.NODE_ENV` for 'browser' + platform: 'neutral', format: 'esm', target: config.build.target || undefined, external: config.optimizeDeps?.exclude, @@ -492,9 +488,8 @@ export async function runOptimizeDeps( splitting: true, sourcemap: true, outdir: processingCacheDir, - ignoreAnnotations: resolvedConfig.command !== 'build', + ignoreAnnotations: !isBuild, metafile: true, - define, plugins: [ ...plugins, esbuildDepPlugin(flatIdDeps, flatIdToExports, config) @@ -887,7 +882,6 @@ export function getDepHash(config: ResolvedConfig): string { { mode: process.env.NODE_ENV || config.mode, root: config.root, - define: config.define, resolve: config.resolve, buildTarget: config.build.target, assetsInclude: config.assetsInclude, diff --git a/playground/define/__tests__/define.spec.ts b/playground/define/__tests__/define.spec.ts index 695d210a822ed6..76b1dfef5feb39 100644 --- a/playground/define/__tests__/define.spec.ts +++ b/playground/define/__tests__/define.spec.ts @@ -40,4 +40,7 @@ test('string', async () => { // html would't need to define replacement expect(await page.textContent('.exp-define')).toBe('__EXP__') expect(await page.textContent('.import-json')).toBe('__EXP__') + expect(await page.textContent('.define-in-dep')).toBe( + defines.__STRINGIFIED_OBJ__ + ) }) diff --git a/playground/define/commonjs-dep/index.js b/playground/define/commonjs-dep/index.js new file mode 100644 index 00000000000000..23e0bf1b32e32f --- /dev/null +++ b/playground/define/commonjs-dep/index.js @@ -0,0 +1 @@ +module.exports = { defined: __STRINGIFIED_OBJ__ } diff --git a/playground/define/commonjs-dep/package.json b/playground/define/commonjs-dep/package.json new file mode 100644 index 00000000000000..3047ae68c9f75a --- /dev/null +++ b/playground/define/commonjs-dep/package.json @@ -0,0 +1,6 @@ +{ + "name": "commonjs-dep", + "private": true, + "version": "1.0.0", + "type": "commonjs" +} diff --git a/playground/define/index.html b/playground/define/index.html index 1260b119149d28..c4f4c598aba563 100644 --- a/playground/define/index.html +++ b/playground/define/index.html @@ -16,6 +16,7 @@

Define

no identifier substring:

define variable in html: __EXP__

import json:

+

define in dep: