esbuild 0.15.6
-
Lower
for awaitloops (#1930)This release lowers
for awaitloops to the equivalentforloop containingawaitwhen esbuild is configured such thatfor awaitloops are unsupported. This transform still requires at least generator functions to be supported since esbuild's lowering ofawaitcurrently relies on generators. This new transformation is mostly modeled after what the TypeScript compiler does. Here's an example:async function f() { for await (let x of y) x() }The code above will now become the following code with
--target=es2017(omitting the code for the__forAwaithelper function):async function f() { try { for (var iter = __forAwait(y), more, temp, error; more = !(temp = await iter.next()).done; more = false) { let x = temp.value; x(); } } catch (temp) { error = [temp]; } finally { try { more && (temp = iter.return) && await temp.call(iter); } finally { if (error) throw error[0]; } } } -
Automatically fix invalid
supportedconfigurations (#2497)The
--target=setting lets you tell esbuild to target a specific version of one or more JavaScript runtimes such aschrome80,node14and esbuild will restrict its output to only those features supported by all targeted JavaScript runtimes. More recently, esbuild introduced the--supported:setting that lets you override which features are supported on a per-feature basis. However, this now lets you configure nonsensical things such as--supported:async-await=false --supported:async-generator=true. Previously doing this could result in esbuild building successfully but producing invalid output.Starting with this release, esbuild will now attempt to automatically fix nonsensical feature override configurations by introducing more overrides until the configuration makes sense. So now the configuration from previous example will be changed such that
async-await=falseimpliesasync-generator=false. The full list of implications that were introduced is below:-
async-await=falseimplies:async-generator=falsefor-await=falsetop-level-await=false
-
generator=falseimplies:async-generator=false
-
object-accessors=falseimplies:class-private-accessor=falseclass-private-static-accessor=false
-
class-field=falseimplies:class-private-field=false
-
class-static-field=falseimplies:class-private-static-field=false
-
class=falseimplies:class-field=falseclass-private-accessor=falseclass-private-brand-check=falseclass-private-field=falseclass-private-method=falseclass-private-static-accessor=falseclass-private-static-field=falseclass-private-static-method=falseclass-static-blocks=falseclass-static-field=false
-
-
Implement a small minification improvement (#2496)
Some people write code that contains a label with an immediate break such as
x: break x. Previously this code was not removed during minification but it will now be removed during minification starting with this release. -
Fix installing esbuild via Yarn with
enableScripts: falseconfigured (#2457)If esbuild is installed with Yarn with the
enableScripts: falsesetting configured, then Yarn will not "unplug" theesbuildpackage (i.e. it will keep the entire package inside a.zipfile). This messes with esbuild's library code that extracts the platform-specific binary executable because that code copies the binary executable into the esbuild package directory, and Yarn's.zipfile system shim doesn't let you write to a directory inside of a.zipfile. This release fixes this problem by writing to thenode_modules/.cache/esbuilddirectory instead in this case. So you should now be able to use esbuild with Yarn whenenableScripts: falseis configured.This fix was contributed by @jonaskuske.