esbuild 0.13.13
-
Add more information about skipping
"main"inpackage.json(#1754)Configuring
mainFields: []breaks most npm packages since it tells esbuild to ignore the"main"field inpackage.json, which most npm packages use to specify their entry point. This is not a bug with esbuild because esbuild is just doing what it was told to do. However, people may do this without understanding how npm packages work, and then be confused about why it doesn't work. This release now includes additional information in the error message:> foo.js:1:27: error: Could not resolve "events" (use "--platform=node" when building for node) 1 │ var EventEmitter = require('events') ╵ ~~~~~~~~ node_modules/events/package.json:20:2: note: The "main" field was ignored because the list of main fields to use is currently set to [] 20 │ "main": "./events.js", ╵ ~~~~~~ -
Fix a tree-shaking bug with
var exports(#1739)This release fixes a bug where a variable named
var exports = {}was incorrectly removed by tree-shaking (i.e. dead code elimination). Theexportsvariable is a special variable in CommonJS modules that is automatically provided by the CommonJS runtime. CommonJS modules are transformed into something like this before being run:function(exports, module, require) { var exports = {} }So using
var exports = {}should have the same effect asexports = {}because the variableexportsshould already be defined. However, esbuild was incorrectly overwriting the definition of theexportsvariable with the one provided by CommonJS. This release merges the definitions together so both are included, which fixes the bug. -
Merge adjacent CSS selector rules with duplicate content (#1755)
With this release, esbuild will now merge adjacent selectors when minifying if they have the same content:
/* Original code */ a { color: red } b { color: red } /* Old output (with --minify) */ a{color:red}b{color:red} /* New output (with --minify) */ a,b{color:red} -
Shorten
top,right,bottom,leftCSS property intoinsetwhen it is supported (#1758)This release enables collapsing of
insetrelated properties:/* Original code */ div { top: 0; right: 0; bottom: 0; left: 0; } /* Output with "--minify-syntax" */ div { inset: 0; }This minification rule is only enabled when
insetproperty is supported by the target environment. Make sure to set esbuild'stargetsetting correctly when minifying if the code will be running in an older environment (e.g. earlier than Chrome 87).This feature was contributed by @sapphi-red.