diff --git a/docs/config/shared-options.md b/docs/config/shared-options.md index 774c35df42a5a5..c6a14b24cbc830 100644 --- a/docs/config/shared-options.md +++ b/docs/config/shared-options.md @@ -280,7 +280,7 @@ export default defineConfig({ }) ``` -When [`build.minify`](./build-options.md#build-minify) is `true`, you can configure to only minify [certain aspects](https://esbuild.github.io/api/#minify) of the code by setting either of `esbuild.minifyIdentifiers`, `esbuild.minifySyntax`, and `esbuild.minifyWhitespace` to `true`. Note the `esbuild.minify` option can't be used to override `build.minify`. +When [`build.minify`](./build-options.md#build-minify) is `true`, all minify optimizations are applied by default. To disable [certain aspects](https://esbuild.github.io/api/#minify) of it, set any of `esbuild.minifyIdentifiers`, `esbuild.minifySyntax`, or `esbuild.minifyWhitespace` options to `false`. Note the `esbuild.minify` option can't be used to override `build.minify`. Set to `false` to disable esbuild transforms. diff --git a/packages/vite/src/node/__tests__/plugins/esbuild.spec.ts b/packages/vite/src/node/__tests__/plugins/esbuild.spec.ts index 50e9183b46e64c..5f063301799cff 100644 --- a/packages/vite/src/node/__tests__/plugins/esbuild.spec.ts +++ b/packages/vite/src/node/__tests__/plugins/esbuild.spec.ts @@ -41,6 +41,31 @@ describe('resolveEsbuildTranspileOptions', () => { expect(options).toEqual(null) }) + test('resolve specific minify options', () => { + const options = resolveEsbuildTranspileOptions( + defineResolvedConfig({ + build: { + minify: 'esbuild' + }, + esbuild: { + keepNames: true, + minifyIdentifiers: false + } + }), + 'es' + ) + expect(options).toEqual({ + target: undefined, + format: 'esm', + keepNames: true, + minify: false, + minifyIdentifiers: false, + minifySyntax: true, + minifyWhitespace: true, + treeShaking: true + }) + }) + test('resolve no minify', () => { const options = resolveEsbuildTranspileOptions( defineResolvedConfig({ @@ -140,6 +165,7 @@ describe('resolveEsbuildTranspileOptions', () => { keepNames: true, minify: false, minifyIdentifiers: true, + minifySyntax: true, minifyWhitespace: false, treeShaking: true }) @@ -157,7 +183,7 @@ describe('resolveEsbuildTranspileOptions', () => { esbuild: { keepNames: true, minifyIdentifiers: true, - minifyWhitespace: true, + minifySyntax: false, treeShaking: true } }), @@ -169,6 +195,7 @@ describe('resolveEsbuildTranspileOptions', () => { keepNames: true, minify: false, minifyIdentifiers: true, + minifySyntax: false, minifyWhitespace: true, treeShaking: true }) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index 11fea0f1133dfb..50a835e9ad707c 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -19,7 +19,7 @@ import type Sass from 'sass' import type Stylus from 'stylus' import type Less from 'less' import type { Alias } from 'types/alias' -import type { TransformOptions } from 'esbuild'; +import type { TransformOptions } from 'esbuild' import { formatMessages, transform } from 'esbuild' import type { RawSourceMap } from '@ampproject/remapping' import { getCodeWithSourcemap, injectSourcesContent } from '../server/sourcemap' @@ -1237,14 +1237,14 @@ function resolveEsbuildMinifyOptions( options: ESBuildOptions ): TransformOptions { if ( - options.minifyIdentifiers || - options.minifySyntax || - options.minifyWhitespace + options.minifyIdentifiers != null || + options.minifySyntax != null || + options.minifyWhitespace != null ) { return { - minifyIdentifiers: options.minifyIdentifiers, - minifySyntax: options.minifySyntax, - minifyWhitespace: options.minifyWhitespace + minifyIdentifiers: options.minifyIdentifiers ?? true, + minifySyntax: options.minifySyntax ?? true, + minifyWhitespace: options.minifyWhitespace ?? true } } else { return { minify: true } diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index ee1c36db651849..42e5bbac76316a 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -318,15 +318,17 @@ export function resolveEsbuildTranspileOptions( // If user enable fine-grain minify options, minify with their options instead if ( - options.minifyIdentifiers || - options.minifySyntax || - options.minifyWhitespace + options.minifyIdentifiers != null || + options.minifySyntax != null || + options.minifyWhitespace != null ) { if (isEsLibBuild) { // Disable minify whitespace as it breaks tree-shaking return { ...options, minify: false, + minifyIdentifiers: options.minifyIdentifiers ?? true, + minifySyntax: options.minifySyntax ?? true, minifyWhitespace: false, treeShaking: true } @@ -334,6 +336,9 @@ export function resolveEsbuildTranspileOptions( return { ...options, minify: false, + minifyIdentifiers: options.minifyIdentifiers ?? true, + minifySyntax: options.minifySyntax ?? true, + minifyWhitespace: options.minifyWhitespace ?? true, treeShaking: true } } diff --git a/playground/minify/vite.config.js b/playground/minify/vite.config.js index 50a0a2da3566fb..43eca91a5c0f30 100644 --- a/playground/minify/vite.config.js +++ b/playground/minify/vite.config.js @@ -2,7 +2,6 @@ import { defineConfig } from 'vite' export default defineConfig({ esbuild: { - minifyIdentifiers: true, - minifyWhitespace: true + minifySyntax: false } })