| <!-- ********************* |
| DO NOT EDIT THIS FILE |
| It is a generated build output from Stardoc. |
| Instead you must edit the .bzl file where the rules are declared, |
| or possibly a markdown file next to the .bzl file |
| ********************* --> |
| |
| # esbuild rules for Bazel |
| |
| The esbuild rules runs the [esbuild](https://github.com/evanw/esbuild) bundler tool with Bazel. |
| esbuild is an extremely fast JavaScript bundler written in Go, its [current benchmarks](https://esbuild.github.io/faq/#benchmark-details) show it can be 320x faster that other bundlers |
| |
| ## Installation |
| |
| Add the `@bazel/esbuild` npm packages to your `devDependencies` in `package.json`. |
| |
| ``` |
| npm install --save-dev @bazel/esbuild |
| ``` |
| or using yarn |
| ``` |
| yarn add -D @bazel/esbuild |
| ``` |
| |
| The esbuild binary is fetched automatically for your platform and is exposed via Bazel toolchains. |
| To do this, add the `esbuild_repositories` rule to your `WORKSPACE`. |
| You'll need to point it to the repository created by npm_install or yarn_install where the `@bazel/esbuild` |
| package is fetched. (Typically, this is `npm`). |
| Set the `npm_repository` attribute to the name of that repository. |
| |
| ```python |
| npm_install( |
| name = "npm", |
| # @bazel/esbuild is a dependency in this package.json |
| package_json = "//:package.json", |
| package_lock_json = "//:package-lock.json", |
| ) |
| |
| load("@build_bazel_rules_nodejs//toolchains/esbuild:esbuild_repositories.bzl", "esbuild_repositories") |
| |
| esbuild_repositories(npm_repository = "npm") |
| ``` |
| |
| > To avoid eagerly fetching all the npm dependencies, this load statement comes from the "Built-in" |
| > `@build_bazel_rules_nodejs` repository rather than from `@npm`. |
| > In rules_nodejs 5.0 we intend to fix this layering violation by having the whole esbuild support |
| > distributed independently of rules_nodejs, and not require any package to be installed from npm. |
| |
| See the API docs for `esbuild_repositories` for ways to customize how Bazel downloads the esbuild package |
| from npm. Alternatively, advanced users can override the download altogether by defining the esbuild repository |
| earlier in your WORKSPACE file, so that the `maybe` inside `esbuild_repositories` is skipped. |
| |
| ## Overview |
| |
| The `esbuild` rule can take a JS or TS dependency tree and bundle it to a single file, or split across multiple files, outputting a directory. |
| |
| ```python |
| load("@npm//@bazel/esbuild:index.bzl", "esbuild") |
| load("@npm//@bazel/typescript:index.bzl", "ts_project") |
| |
| ts_project( |
| name = "lib", |
| srcs = ["a.ts"], |
| ) |
| |
| esbuild( |
| name = "bundle", |
| entry_point = "a.ts", |
| deps = [":lib"], |
| ) |
| ``` |
| |
| The above will create three output files, `bundle.js`, `bundle.js.map` and `bundle_metadata.json` which contains the bundle metadata to aid in debugging and resoloution tracing. |
| |
| To create a code split bundle, set `splitting = True` on the `esbuild` rule. |
| |
| ```python |
| load("@npm//@bazel/esbuild:index.bzl", "esbuild") |
| load("@npm//@bazel/typescript:index.bzl", "ts_project") |
| |
| ts_project( |
| name = "lib", |
| srcs = ["a.ts"], |
| deps = [ |
| "@npm//foo", |
| ], |
| ) |
| |
| esbuild( |
| name = "bundle", |
| entry_point = "a.ts", |
| deps = [":lib"], |
| splitting = True, |
| ) |
| ``` |
| |
| This will create an output directory containing all the code split chunks, along with their sourcemaps files |
| |
| |
| ## esbuild |
| |
| **USAGE** |
| |
| <pre> |
| esbuild(<a href="#esbuild-name">name</a>, <a href="#esbuild-args">args</a>, <a href="#esbuild-args_json">args_json</a>, <a href="#esbuild-config">config</a>, <a href="#esbuild-define">define</a>, <a href="#esbuild-define_settings">define_settings</a>, <a href="#esbuild-deps">deps</a>, <a href="#esbuild-entry_point">entry_point</a>, <a href="#esbuild-entry_points">entry_points</a>, |
| <a href="#esbuild-external">external</a>, <a href="#esbuild-format">format</a>, <a href="#esbuild-launcher">launcher</a>, <a href="#esbuild-link_workspace_root">link_workspace_root</a>, <a href="#esbuild-max_threads">max_threads</a>, <a href="#esbuild-metafile">metafile</a>, <a href="#esbuild-minify">minify</a>, <a href="#esbuild-output">output</a>, |
| <a href="#esbuild-output_css">output_css</a>, <a href="#esbuild-output_dir">output_dir</a>, <a href="#esbuild-output_map">output_map</a>, <a href="#esbuild-platform">platform</a>, <a href="#esbuild-sourcemap">sourcemap</a>, <a href="#esbuild-sources_content">sources_content</a>, <a href="#esbuild-splitting">splitting</a>, <a href="#esbuild-srcs">srcs</a>, |
| <a href="#esbuild-stamp">stamp</a>, <a href="#esbuild-target">target</a>) |
| </pre> |
| |
| Runs the esbuild bundler under Bazel |
| |
| For further information about esbuild, see https://esbuild.github.io/ |
| |
| |
| **ATTRIBUTES** |
| |
| |
| <h4 id="esbuild-name">name</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#name">Name</a>, mandatory*): A unique name for this target. |
| |
| |
| <h4 id="esbuild-args">args</h4> |
| |
| (*<a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a>*): A dict of extra arguments that are included in the call to esbuild, where the key is the argument name. |
| Values are subject to $(location ...) expansion |
| |
| Defaults to `{}` |
| |
| <h4 id="esbuild-args_json">args_json</h4> |
| |
| (*String*): Internal use only |
| |
| Defaults to `""` |
| |
| <h4 id="esbuild-config">config</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): Configuration file used for esbuild, from the esbuild_config macro. Note that options set in this file may get overwritten. |
| See https://github.com/bazelbuild/rules_nodejs/tree/stable/packages/esbuild/test/plugins/BUILD.bazel for examples of using esbuild_config and plugins. The dependencies of this attribute must provide: Unknown Provider |
| |
| |
| Defaults to `None` |
| |
| <h4 id="esbuild-define">define</h4> |
| |
| (*<a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: String -> String</a>*): A dict of global identifier replacements. Values are subject to $(location ...) expansion. |
| Example: |
| ```python |
| esbuild( |
| name = "bundle", |
| define = { |
| "process.env.NODE_ENV": "production" |
| }, |
| ) |
| ``` |
| |
| See https://esbuild.github.io/api/#define for more details |
| |
| Defaults to `{}` |
| |
| <h4 id="esbuild-define_settings">define_settings</h4> |
| |
| (*<a href="https://bazel.build/docs/skylark/lib/dict.html">Dictionary: Label -> String</a>*): A dict of labels of Starlark build settings and identifiers to be replaced with their values. |
| Example: |
| ```python |
| load("@bazel_skylib//rules:common_settings.bzl", "string_flag") |
| |
| string_flag( |
| name = "api_endpoint", |
| build_setting_default = "https://example.com/v1", |
| ) |
| |
| esbuild( |
| name = "bundle", |
| define_settings = { |
| ":api_endpoint": "API_ENDPOINT", |
| }, |
| ) |
| ``` |
| |
| The build setting has to provide [`BuildSettingInfo`](https://github.com/bazelbuild/bazel-skylib/blob/6e30a77347071ab22ce346b6d20cf8912919f644/rules/common_settings.bzl#L24). |
| The value is automatically converted to a JS literal. |
| See https://docs.bazel.build/versions/main/skylark/config.html#predefined-settings for more details on Starlark build settings. The dependencies of this attribute must provide: Unknown Provider |
| |
| |
| Defaults to `{}` |
| |
| <h4 id="esbuild-deps">deps</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>*): A list of direct dependencies that are required to build the bundle |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild-entry_point">entry_point</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): The bundle's entry point (e.g. your main.js or app.js or index.js) |
| |
| This is a shortcut for the `entry_points` attribute with a single entry. |
| Specify either this attribute or `entry_point`, but not both. |
| |
| Defaults to `None` |
| |
| <h4 id="esbuild-entry_points">entry_points</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>*): The bundle's entry points (e.g. your main.js or app.js or index.js) |
| |
| Specify either this attribute or `entry_point`, but not both. |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild-external">external</h4> |
| |
| (*List of strings*): A list of module names that are treated as external and not included in the resulting bundle |
| |
| See https://esbuild.github.io/api/#external for more details |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild-format">format</h4> |
| |
| (*String*): The output format of the bundle, defaults to iife when platform is browser |
| and cjs when platform is node. If performing code splitting or multiple entry_points are specified, defaults to esm. |
| |
| See https://esbuild.github.io/api/#format for more details |
| |
| Defaults to `""` |
| |
| <h4 id="esbuild-launcher">launcher</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>, mandatory*): Internal use only |
| |
| |
| <h4 id="esbuild-link_workspace_root">link_workspace_root</h4> |
| |
| (*Boolean*): Link the workspace root to the bin_dir to support absolute requires like 'my_wksp/path/to/file'. |
| If source files need to be required then they can be copied to the bin_dir with copy_to_bin. |
| |
| Defaults to `False` |
| |
| <h4 id="esbuild-max_threads">max_threads</h4> |
| |
| (*Integer*): Sets the `GOMAXPROCS` variable to limit the number of threads that esbuild can run with. |
| This can be useful if running many esbuild rule invocations in parallel, which has the potential to cause slowdown. |
| For general use, leave this attribute unset. |
| |
| Defaults to `0` |
| |
| <h4 id="esbuild-metafile">metafile</h4> |
| |
| (*Boolean*): if true, esbuild creates a metafile along the output |
| |
| Defaults to `True` |
| |
| <h4 id="esbuild-minify">minify</h4> |
| |
| (*Boolean*): Minifies the bundle with the built in minification. |
| Removes whitespace, shortens identifieres and uses equivalent but shorter syntax. |
| |
| Sets all --minify-* flags |
| |
| See https://esbuild.github.io/api/#minify for more details |
| |
| Defaults to `False` |
| |
| <h4 id="esbuild-output">output</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): Name of the output file when bundling |
| |
| |
| <h4 id="esbuild-output_css">output_css</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): Declare a .css file will be output next to output bundle. |
| |
| If your JS code contains import statements that import .css files, esbuild will place the |
| content in a file next to the main output file, which you'll need to declare. If your output |
| file is named 'foo.js', you should set this to 'foo.css'. |
| |
| |
| <h4 id="esbuild-output_dir">output_dir</h4> |
| |
| (*Boolean*): If true, esbuild produces an output directory containing all output files |
| |
| Defaults to `False` |
| |
| <h4 id="esbuild-output_map">output_map</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): Name of the output source map when bundling |
| |
| |
| <h4 id="esbuild-platform">platform</h4> |
| |
| (*String*): The platform to bundle for. |
| |
| See https://esbuild.github.io/api/#platform for more details |
| |
| Defaults to `"browser"` |
| |
| <h4 id="esbuild-sourcemap">sourcemap</h4> |
| |
| (*String*): Defines where sourcemaps are output and how they are included in the bundle. By default, a separate `.js.map` file is generated and referenced by the bundle. If 'external', a separate `.js.map` file is generated but not referenced by the bundle. If 'inline', a sourcemap is generated and its contents are inlined into the bundle (and no external sourcemap file is created). If 'both', a sourcemap is inlined and a `.js.map` file is created. |
| |
| See https://esbuild.github.io/api/#sourcemap for more details |
| |
| Defaults to `""` |
| |
| <h4 id="esbuild-sources_content">sources_content</h4> |
| |
| (*Boolean*): If False, omits the `sourcesContent` field from generated source maps |
| |
| See https://esbuild.github.io/api/#sources-content for more details |
| |
| Defaults to `False` |
| |
| <h4 id="esbuild-splitting">splitting</h4> |
| |
| (*Boolean*): If true, esbuild produces an output directory containing all the output files from code splitting for multiple entry points |
| |
| See https://esbuild.github.io/api/#splitting and https://esbuild.github.io/api/#entry-points for more details |
| |
| Defaults to `False` |
| |
| <h4 id="esbuild-srcs">srcs</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">List of labels</a>*): Source files to be made available to esbuild |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild-stamp">stamp</h4> |
| |
| (*<a href="https://bazel.build/docs/build-ref.html#labels">Label</a>*): Whether to encode build information into the output. Possible values: |
| - `@rules_nodejs//nodejs/stamp:always`: |
| Always stamp the build information into the output, even in [--nostamp][stamp] builds. |
| This setting should be avoided, since it potentially causes cache misses remote caching for |
| any downstream actions that depend on it. |
| - `@rules_nodejs//nodejs/stamp:never`: |
| Always replace build information by constant values. This gives good build result caching. |
| - `@rules_nodejs//nodejs/stamp:use_stamp_flag`: |
| Embedding of build information is controlled by the [--[no]stamp][stamp] flag. |
| Stamped binaries are not rebuilt unless their dependencies change. |
| [stamp]: https://docs.bazel.build/versions/main/user-manual.html#flag--stamp The dependencies of this attribute must provide: StampSettingInfo |
| |
| |
| Defaults to `@rules_nodejs//nodejs/stamp:use_stamp_flag` |
| |
| <h4 id="esbuild-target">target</h4> |
| |
| (*String*): Environment target (e.g. es2017, chrome58, firefox57, safari11, |
| edge16, node10, esnext). Default es2015. |
| |
| See https://esbuild.github.io/api/#target for more details |
| |
| Defaults to `"es2015"` |
| |
| |
| ## configure_esbuild_toolchain |
| |
| **USAGE** |
| |
| <pre> |
| configure_esbuild_toolchain(<a href="#configure_esbuild_toolchain-name">name</a>, <a href="#configure_esbuild_toolchain-binary">binary</a>, <a href="#configure_esbuild_toolchain-exec_compatible_with">exec_compatible_with</a>) |
| </pre> |
| |
| Defines a toolchain for esbuild given the binary path and platform constraints |
| |
| **PARAMETERS** |
| |
| |
| <h4 id="configure_esbuild_toolchain-name">name</h4> |
| |
| unique name for this toolchain, generally in the form "esbuild_platform_arch" |
| |
| |
| |
| <h4 id="configure_esbuild_toolchain-binary">binary</h4> |
| |
| label for the esbuild binary |
| |
| |
| |
| <h4 id="configure_esbuild_toolchain-exec_compatible_with">exec_compatible_with</h4> |
| |
| list of platform constraints |
| |
| |
| |
| |
| ## esbuild_config |
| |
| **USAGE** |
| |
| <pre> |
| esbuild_config(<a href="#esbuild_config-name">name</a>, <a href="#esbuild_config-config_file">config_file</a>, <a href="#esbuild_config-srcs">srcs</a>, <a href="#esbuild_config-deps">deps</a>, <a href="#esbuild_config-kwargs">kwargs</a>) |
| </pre> |
| |
| Macro for an esbuild configuration file and its assoicated dependencies |
| |
| **PARAMETERS** |
| |
| |
| <h4 id="esbuild_config-name">name</h4> |
| |
| Unique name for this rule |
| |
| |
| |
| <h4 id="esbuild_config-config_file">config_file</h4> |
| |
| The configuration file / entrypoint |
| |
| |
| |
| <h4 id="esbuild_config-srcs">srcs</h4> |
| |
| List of source files referenced by the configuration |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild_config-deps">deps</h4> |
| |
| List of dependencies required for this configuration |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild_config-kwargs">kwargs</h4> |
| |
| Any other common attributes |
| |
| |
| |
| |
| ## esbuild_repositories |
| |
| **USAGE** |
| |
| <pre> |
| esbuild_repositories(<a href="#esbuild_repositories-npm_repository">npm_repository</a>, <a href="#esbuild_repositories-name">name</a>, <a href="#esbuild_repositories-npm_args">npm_args</a>, <a href="#esbuild_repositories-kwargs">kwargs</a>) |
| </pre> |
| |
| Helper for fetching and setting up the esbuild versions and toolchains |
| |
| This uses Bazel's downloader (via `http_archive`) to fetch the esbuild package |
| from npm, separately from any `npm_install`/`yarn_install` in your WORKSPACE. |
| To configure where the download is from, you make a file containing a rewrite rule like |
| |
| rewrite (registry.nodejs.org)/(.*) artifactory.build.internal.net/artifactory/$1/$2 |
| |
| You can find some documentation on the rewrite patterns in the Bazel sources: |
| [UrlRewriterConfig.java](https://github.com/bazelbuild/bazel/blob/4.2.1/src/main/java/com/google/devtools/build/lib/bazel/repository/downloader/UrlRewriterConfig.java#L66) |
| |
| Then use the `--experimental_downloader_config` Bazel option to point to your file. |
| For example if you created `.bazel_downloader_config` you might add to your `.bazelrc` file: |
| |
| common --experimental_downloader_config=.bazel_downloader_config |
| |
| |
| **PARAMETERS** |
| |
| |
| <h4 id="esbuild_repositories-npm_repository">npm_repository</h4> |
| |
| the name of the repository where the @bazel/esbuild package is installed |
| by npm_install or yarn_install. |
| |
| |
| |
| <h4 id="esbuild_repositories-name">name</h4> |
| |
| currently unused |
| |
| Defaults to `""` |
| |
| <h4 id="esbuild_repositories-npm_args">npm_args</h4> |
| |
| additional args to pass to the npm install rule |
| |
| Defaults to `[]` |
| |
| <h4 id="esbuild_repositories-kwargs">kwargs</h4> |
| |
| additional named parameters to the npm_install rule |
| |
| |
| |
| |