-
The stderr log format now contains line numbers after file names (#865)
Error messages in stderr now have a line and column number after the file name.
Before:
> src/structs/RTree.js: warning: Duplicate key "compareMinX" in object literal 469 │ compareMinX: function (a, b) ╵ ~~~~~~~~~~~ src/structs/RTree.js: note: The original "compareMinX" is here 206 │ compareMinX: compareNodeMinX, ╵ ~~~~~~~~~~~
After:
> src/structs/RTree.js:469:4: warning: Duplicate key "compareMinX" in object literal 469 │ compareMinX: function (a, b) ╵ ~~~~~~~~~~~ src/structs/RTree.js:206:4: note: The original "compareMinX" is here 206 │ compareMinX: compareNodeMinX, ╵ ~~~~~~~~~~~
This should make log messages slightly easier to parse if you want to parse stderr instead of using esbuild's API. Previously you needed a multi-line regular expression to get the line number, but now that the line number is duplicated in two places you should only need a single-line regular expression.
Note that this is still the hacky way to get error information and is potentially unstable, since it will break if the log format changes. Log messages are mainly intended for humans. The straightforward and stable way to do this is still to use esbuild's API, which returns log messages as an array of objects.
-
Allow
--define
withimport.meta
The
--define
feature lets you replace specific identifiers and member expression chains with compile-time constants. However, it previously didn't work withimport.meta
because this is a special case in the grammar. Theimport
keyword is not actually an identifier expression. This distinction isn't helpful though, and it's not unreasonable to want to use the--define
feature to replaceimport.meta
properties too.With this release, it's now possible to use e.g.
--define:import.meta.foo=123
to replace specific properties accessed off of theimport.meta
object as well as to use e.g.--define:import.meta={\"foo\":123}
to substitute the entireimport.meta
expression with something else. -
Fix a race condition with multiple injected files (#871)
Using multiple injected files could cause a data race that trips Go's race detector. The data race has been fixed in this release. The fix was contributed by @Deleplace.
-
Change
--serve
behavior to serve on all interfaces (#866)The default address for the
--serve
flag has changed from127.0.0.1
(serve on the loopback interface) to0.0.0.0
(serve on all interfaces). You can still manually specify either one using--serve=127.0.0.1:8000
or--serve=0.0.0.0:8000
. This just changes the default behavior that happens when you pass--serve
with no host address (or when you just use the--servedir=
flag without--serve=
).In addition, you can now also specify an IPv6 address. Previously there was a parsing issue that prevented this. For example, you can pass
--serve=[::1]:8000
to serve on the loopback interface and--serve=[::]:8000
to serve on all interfaces. -
Change the import resolution rules of absolute paths (#862)
Previously absolute paths were considered to be pre-resolved by the resolver (in contrast to relative and package paths, which need to be converted to an absolute path). This meant that absolute paths which did not actually exist caused a failure in the loader when it tried to load the path instead of in the resolver when it tried to resolve the path.
With the previous change in version 0.8.47 to support removing URL query and/or hash parameters from the path, path resolution can now be run multiple times. If path resolution fails and the path contains a
?
and/or#
, path resolution is re-run with the URL query/hash parameters removed. It is problematic to consider absolute paths to be pre-resolved because it means that paths containing query/hash parameters make the loader try to load the wrong path, and do not run the resolver again with the parameter suffix removed.In this release, esbuild will now validate absolute paths in the resolver. So invalid paths will now fail in the resolver and retry without the parameter suffix instead of failing in the loader, which correctly handles a parameter suffix on absolute paths. In addition, this release now handles implicit file extensions on absolute paths. This makes esbuild a more accurate copy of node's module resolution algorithm, which does this as well.
-
Output files in
metafile
now haveentryPoint
(#711)There is now an optional
entryPoint
property on each output file in the JSON metadata file generated with the--metafile=
flag. It is only present for output files that are the bundled results of entry point files, and contains the path name of the corresponding input entry point file. This property is not present on other kinds of output files (e.g. code splitting chunks). This feature was contributed by @remorses.