Skip to content

v0.13.13

Compare
Choose a tag to compare
@github-actions github-actions released this 09 Nov 06:38
  • Add more information about skipping "main" in package.json (#1754)

    Configuring mainFields: [] breaks most npm packages since it tells esbuild to ignore the "main" field in package.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). The exports variable 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 as exports = {} because the variable exports should already be defined. However, esbuild was incorrectly overwriting the definition of the exports variable 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, left CSS property into inset when it is supported (#1758)

    This release enables collapsing of inset related 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 inset property is supported by the target environment. Make sure to set esbuild's target setting 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.