# Building Angular with Bazel Note: this doc is for developing Angular, it is _not_ public documentation for building an Angular application with Bazel. The Bazel build tool (http://bazel.build) provides fast, reliable incremental builds. We plan to migrate Angular's build scripts to Bazel. ## Installation Install Bazel from the distribution, see [install] instructions. On Mac, just `brew install bazel`. Bazel will install a hermetic version of Node, npm, and Yarn when you run the first build. [install]: https://bazel.build/versions/master/docs/install.html ## Configuration The `WORKSPACE` file indicates that our root directory is a Bazel project. It contains the version of the Bazel rules we use to execute build steps, from `build_bazel_rules_typescript`. The sources on [GitHub] are published from Google's internal repository (google3). That repository defines dependencies on specific versions of all the tools. You can run the tools Bazel installed, for example rather than `yarn install` (which depends on whatever version you have installed on your machine), you can `bazel run @yarn//:yarn`. Bazel accepts a lot of options. We check in some options in the `.bazelrc` file. See the [bazelrc doc]. For example, if you don't want Bazel to create several symlinks in your project directory (`bazel-*`) you can add the line `build --symlink_prefix=/` to your `.bazelrc` file. [GitHub]: https://github.com/bazelbuild/rules_typescript [bazelrc doc]: https://bazel.build/versions/master/docs/bazel-user-manual.html#bazelrc ## Building Angular - Build a package: `bazel build packages/core` - Build all packages: `bazel build packages/...` You can use [ibazel] to get a "watch mode" that continuously keeps the outputs up-to-date as you save sources. Note this is new as of May 2017 and not very stable yet. [ibazel]: https://github.com/bazelbuild/bazel-watcher ## Testing Angular - Test package in node: `bazel test packages/core/test:test` - Test package in karma: `bazel test packages/core/test:test_web` - Test all packages: `bazel test packages/...` You can use [ibazel] to get a "watch mode" that continuously keeps the outputs up-to-date as you save sources. ### Debugging a Node Test - Open chrome at: [chrome://inspect](chrome://inspect) - Click on `Open dedicated DevTools for Node` to launch a debugger. - Run test: `bazel test packages/core/test:test --config=debug` The process should automatically connect to the debugger. ### Debugging a Karma Test - Run test: `bazel run packages/core/test:test_web` - Open chrome at: [http://localhost:9876/debug.html](http://localhost:9876/debug.html) - Open chrome inspector