Skip to content

Commit 06d86e4

Browse files
committed
fix(lib-mode): do not minify lib mode es output
Otherwise it breaks library tree-shaking vuejs/core#2860 (comment)
1 parent ba0c42c commit 06d86e4

File tree

3 files changed

+17
-6
lines changed

3 files changed

+17
-6
lines changed

packages/vite/src/node/build.ts

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -306,9 +306,7 @@ export function resolveBuildPlugins(config: ResolvedConfig): {
306306
post: [
307307
buildImportAnalysisPlugin(config),
308308
buildEsbuildPlugin(config),
309-
...(options.minify === 'terser'
310-
? [terserPlugin(options.terserOptions)]
311-
: []),
309+
...(options.minify === 'terser' ? [terserPlugin(config)] : []),
312310
...(options.manifest ? [manifestPlugin(config)] : []),
313311
...(options.ssrManifest ? [ssrManifestPlugin(config)] : []),
314312
buildReporterPlugin(config),

packages/vite/src/node/plugins/esbuild.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -215,7 +215,13 @@ export const buildEsbuildPlugin = (config: ResolvedConfig): Plugin => {
215215
}
216216

217217
const target = config.build.target
218-
const minify = config.build.minify === 'esbuild'
218+
const minify =
219+
config.build.minify === 'esbuild' &&
220+
// Do not minify ES lib output since that would remove pure annotations
221+
// and break tree-shaking
222+
// https://github.com/vuejs/vue-next/issues/2860#issuecomment-926882793
223+
!(config.build.lib && opts.format === 'es')
224+
219225
if ((!target || target === 'esnext') && !minify) {
220226
return null
221227
}

packages/vite/src/node/plugins/terser.ts

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import { Plugin } from '../plugin'
22
import { Worker } from 'okie'
33
import { Terser } from 'types/terser'
4+
import { ResolvedConfig } from '..'
45

5-
export function terserPlugin(options: Terser.MinifyOptions): Plugin {
6+
export function terserPlugin(config: ResolvedConfig): Plugin {
67
const worker = new Worker(
78
(basedir: string, code: string, options: Terser.MinifyOptions) => {
89
// when vite is linked, the worker thread won't share the same resolve
@@ -20,9 +21,15 @@ export function terserPlugin(options: Terser.MinifyOptions): Plugin {
2021
name: 'vite:terser',
2122

2223
async renderChunk(code, _chunk, outputOptions) {
24+
// Do not minify ES lib output since that would remove pure annotations
25+
// and break tree-shaking
26+
if (config.build.lib && outputOptions.format === 'es') {
27+
return null
28+
}
29+
2330
const res = await worker.run(__dirname, code, {
2431
safari10: true,
25-
...options,
32+
...config.build.terserOptions,
2633
sourceMap: !!outputOptions.sourcemap,
2734
module: outputOptions.format.startsWith('es'),
2835
toplevel: outputOptions.format === 'cjs'

0 commit comments

Comments
 (0)