Giter VIP home page Giter VIP logo

rules_esbuild's Introduction

Bazel rules for esbuild

This is a Bazel rule which wraps the esbuild CLI.

Features:

  • Same API as the @bazel/esbuild package, so it's easy to migrate.
  • Use the Bazel downloader to fetch the npm package and the native binaries as described here: https://esbuild.github.io/getting-started/#download-a-build. This means that the toolchain is fully self-contained and hermetic, and doesn't require you to put esbuild in your package.json. These rules never run npm install.

Need help? This ruleset has support provided by https://aspect.dev.

Installation

From the release you wish to use: https://github.com/aspect-build/rules_esbuild/releases copy the WORKSPACE snippet into your WORKSPACE file.

Usage

See the API documentation, and the example usage in the examples/ directory. Note that the examples rely on code in the /WORKSPACE file in the root of this repo.

From a BUILD file

The simplest usage is with the esbuild macro.

If needed, instead of the macro you could call the underlying esbuild_bundle rule directly.

In a macro

You could write a Bazel macro which uses esbuild, by calling it from a genrule or run_binary. For this purpose, you can use the ESBUILD_BIN Make variable exposed by the @aspect_rules_esbuild//esbuild:resolved_toolchain. This is illustrated in examples/macro.

In a custom rule

The most advanced usage is to write your own custom rule.

This is a good choice if you need to integrate with other Bazel rules via Providers.

You can follow the example of /esbuild/defs.bzl by re-using the lib starlark struct exposed by /esbuild/private/esbuild.bzl. Note that this is a private API which can change without notice.

Custom Toolchain

You can register your own toolchain to provide an esbuild binary. For example, you could build esbuild from source within the Bazel build, so that you can freely edit or patch esbuild and have those changes immediately reflected. You'll need these things:

  1. A rule which builds or loads an esbuild binary, for example a go_binary rule.
  2. An esbuild_toolchain rule which depends on that binary from step 1 as the target_tool.
  3. A toolchain rule which depends on that target from step 2 as its toolchain and @aspect_rules_esbuild//esbuild:toolchain_type as its toolchain_type.
  4. A call to the register_toolchains function in your WORKSPACE that refers to the toolchain rule defined in step 3.

rules_esbuild's People

Contributors

gregmagolan avatar alexeagle avatar renovate[bot] avatar jbedard avatar aghassi avatar ralimi avatar arobinson avatar bduffany avatar brendean avatar dpoluyanov avatar jessetatasciore avatar jialipassion avatar josephglanville avatar longlho avatar mattem avatar koulmomo avatar pattrickrice avatar realtimetodie avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.