From 2960f54b95fb6fb05251cbec5d5b247a3e980208 Mon Sep 17 00:00:00 2001 From: Marc Redemske Date: Thu, 11 Nov 2021 20:08:06 +0100 Subject: [PATCH] feat(esbuild): add option to disable metafile generation (#3066) --- docs/esbuild.md | 13 +++++++++--- packages/esbuild/esbuild.bzl | 16 ++++++++++----- packages/esbuild/launcher.js | 11 +++++----- packages/esbuild/test/metafile/BUILD.bazel | 24 ++++++++++++++++++++++ packages/esbuild/test/metafile/main.js | 0 packages/esbuild/test/metafile/test.sh | 8 ++++++++ 6 files changed, 59 insertions(+), 13 deletions(-) create mode 100644 packages/esbuild/test/metafile/BUILD.bazel create mode 100644 packages/esbuild/test/metafile/main.js create mode 100755 packages/esbuild/test/metafile/test.sh diff --git a/docs/esbuild.md b/docs/esbuild.md index fa74dda834..c28a08251e 100755 --- a/docs/esbuild.md +++ b/docs/esbuild.md @@ -103,8 +103,9 @@ This will create an output directory containing all the code split chunks, along
 esbuild(name, args, args_json, config, define, deps, entry_point, entry_points, external, format,
-        launcher, link_workspace_root, max_threads, minify, node_context_data, output, output_css,
-        output_dir, output_map, platform, sourcemap, sources_content, splitting, srcs, target)
+        launcher, link_workspace_root, max_threads, metafile, minify, node_context_data, output,
+        output_css, output_dir, output_map, platform, sourcemap, sources_content, splitting, srcs,
+        target)
 
Runs the esbuild bundler under Bazel @@ -218,6 +219,12 @@ For general use, leave this attribute unset. Defaults to `0` +

metafile

+ +(*Boolean*): if true, esbuild creates a metafile along the output + +Defaults to `True` +

minify

(*Boolean*): Minifies the bundle with the built in minification. @@ -306,7 +313,7 @@ Defaults to `[]`

target

-(*String*): Environment target (e.g. es2017, chrome58, firefox57, safari11, +(*String*): Environment target (e.g. es2017, chrome58, firefox57, safari11, edge16, node10, esnext). Default es2015. See https://esbuild.github.io/api/#target for more details diff --git a/packages/esbuild/esbuild.bzl b/packages/esbuild/esbuild.bzl index 28966250ce..7fa217dc85 100644 --- a/packages/esbuild/esbuild.bzl +++ b/packages/esbuild/esbuild.bzl @@ -70,7 +70,7 @@ def _esbuild_impl(ctx): # Also disable the log limit and show all logs "logLevel": "warning", "logLimit": 0, - "metafile": True, + "metafile": ctx.attr.metafile, "platform": ctx.attr.platform, "preserveSymlinks": True, "sourcesContent": ctx.attr.sources_content, @@ -146,9 +146,10 @@ def _esbuild_impl(ctx): launcher_args.add("--esbuild_args=%s" % args_file.path) # add metafile - meta_file = ctx.actions.declare_file("%s_metadata.json" % ctx.attr.name) - outputs.append(meta_file) - launcher_args.add("--metafile=%s" % meta_file.path) + if ctx.attr.metafile: + meta_file = ctx.actions.declare_file("%s_metadata.json" % ctx.attr.name) + outputs.append(meta_file) + launcher_args.add("--metafile=%s" % meta_file.path) # add reference to the users args file, these are merged within the launcher if ctx.attr.args_json: @@ -282,6 +283,11 @@ This can be useful if running many esbuild rule invocations in parallel, which h For general use, leave this attribute unset. """, ), + "metafile": attr.bool( + default = True, + doc = "if true, esbuild creates a metafile along the output", + mandatory = False, + ), "minify": attr.bool( default = False, doc = """Minifies the bundle with the built in minification. @@ -350,7 +356,7 @@ See https://esbuild.github.io/api/#splitting and https://esbuild.github.io/api/# ), "target": attr.string( default = "es2015", - doc = """Environment target (e.g. es2017, chrome58, firefox57, safari11, + doc = """Environment target (e.g. es2017, chrome58, firefox57, safari11, edge16, node10, esnext). Default es2015. See https://esbuild.github.io/api/#target for more details diff --git a/packages/esbuild/launcher.js b/packages/esbuild/launcher.js index 0406ace76a..cd0e606d3a 100755 --- a/packages/esbuild/launcher.js +++ b/packages/esbuild/launcher.js @@ -99,7 +99,7 @@ async function runOneBuild(args, userArgsFilePath, configFilePath) { ...getEsbuildArgs(userArgsFilePath) } } - + if (configFilePath) { const config = await processConfigFile(configFilePath, args); args = { @@ -107,12 +107,13 @@ async function runOneBuild(args, userArgsFilePath, configFilePath) { ...config }; } - - const metafile = getFlag('--metafile'); - + try { const result = await esbuild.build(args); - writeFileSync(metafile, JSON.stringify(result.metafile)); + if (result.metafile) { + const metafile = getFlag('--metafile'); + writeFileSync(metafile, JSON.stringify(result.metafile)); + } } catch (e) { console.error(e); process.exit(1); diff --git a/packages/esbuild/test/metafile/BUILD.bazel b/packages/esbuild/test/metafile/BUILD.bazel new file mode 100644 index 0000000000..79c679ea86 --- /dev/null +++ b/packages/esbuild/test/metafile/BUILD.bazel @@ -0,0 +1,24 @@ +load("//packages/esbuild:index.bzl", "esbuild") + +esbuild( + name = "lib", + srcs = [ + ":main.js", + ], + entry_point = "main.js", + metafile = False, +) + +sh_test( + name = "test", + size = "small", + srcs = [ + "test.sh", + ], + args = [ + "$(locations :lib)", + ], + data = [ + ":lib", + ], +) diff --git a/packages/esbuild/test/metafile/main.js b/packages/esbuild/test/metafile/main.js new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/esbuild/test/metafile/test.sh b/packages/esbuild/test/metafile/test.sh new file mode 100755 index 0000000000..fc39fd94db --- /dev/null +++ b/packages/esbuild/test/metafile/test.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash + +set -uo pipefail; + +while [ "$#" -ne 0 ]; do + [[ "lib_metadata.json" == "$(basename $1)" ]] && exit 1; + shift; +done