Giter Club home page Giter Club logo

bazel-example's Introduction

Bazel Example Monorepo

CI Build Status

This is my attempt to learn how to use Bazel as the build system for a monorepo.

I'm starting with Javascript and Typescript applications and libraries as I currently work in that ecosystem.

Set up

Install the dependencies first.

yarn

Build instructions

Build everything

yarn build

Build a package

yarn exec bazelisk -- build //path/to/package:target

Run an app

yarn exec bazelisk -- run //path/to/package:target

# examples
yarn exec bazelisk -- run //apps/javascript/no_deps:bin
yarn exec bazelisk -- run //apps/javascript/internal_deps:bin
yarn exec bazelisk -- run //apps/javascript/external_deps:bin
yarn exec bazelisk -- run //apps/typescript/no_deps:bin
yarn exec bazelisk -- run //apps/typescript/internal_deps:bin
yarn exec bazelisk -- run //apps/typescript/external_deps:bin

Packages

Path Description
//libs/javascript/no_deps Javascript library with no dependencies
//libs/javascript/external_deps Javascript library with one external dependency
//libs/javascript/internal_deps Javascript library with one internal dependency
//libs/typescript/no_deps Typescript library with no dependencies
//libs/typescript/external_deps Typescript library with one external dependency
//libs/typescript/internal_deps Typescript library with one internal Typescript dependency (note: import paths are from workspace root in TS source code)
//apps/javascript/no_deps Javascript app with no dependencies
//apps/javascript/external_deps Javascript app with one external dependency
//apps/javascript/internal_deps Javascript app with one internal dependency
//apps/typescript/no_deps Typescript app with no dependencies

Notes

The root package.json file is important for bootstrapping all the dependencies used in the repo.

Most of the other package.json files are optional. They are only used if we are building a publishable package using the pkg_npm rule.

Bazel's Typescript support adds the workspace root as an import path so you can refer to local packages easily. See the path in tsconfig.json and the import in libs/typescript/internal_deps/index.ts for an example.

Bundling packages with rollup doesn't seem to work in all cases. I don't know why not.

bazel-example's People

Contributors

dependabot[bot] avatar igilham avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

bazel-example's Issues

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.