# Closure Tools for Bazel
## Deprecation notice
Please note, Closure Tools for Bazel is deprecated, and will be moved soon.
Please see [github.com/bazelbuild/rules_closure](https://github.com/bazelbuild/rules_closure/)
for the new rules.
## Overview
These rules define targets for JavaScript, stylesheets, and templates that will
be compiled with the Closure Tools toolchain.
* `closure_js_binary`
* `closure_js_library`
* `closure_stylesheet_library`
* `closure_template_library`
## Setup
Add the following to your `WORKSPACE` file to add the external repositories
for the various Closure Tools binaries and the Closure Library:
```python
load("@bazel_tools//tools/build_rules/closure:closure_repositories.bzl", "closure_repositories")
closure_repositories()
```
## Usage
Suppose we are building a web application with template, stylesheet, and
JavaScript files: `hello.soy`, `hello.gss`, and `hello.js`.
`hello.soy`
```
{namespace hello.templates autoescape="strict"}
/**
* Renders an element containing the text "hello".
*/
{template .hello}
Hello.
{/template}
```
`hello.gss`
```css
.hello-container {
color: red;
font-weight: bold;
}
```
`hello.js`
```javascript
goog.provide('hello');
goog.require('goog.soy');
goog.require('hello.templates');
goog.soy.renderElement(document.body, hello.templates.hello);
```
We can create a BUILD file to compile these and produce two files:
* `hello_combined.css`
* `hello_combined.js`
`BUILD`
```python
load("@bazel_tools//tools/build_rules/closure:closure_js_binary.bzl", "closure_js_binary")
load("@bazel_tools//tools/build_rules/closure:closure_js_library.bzl", "closure_js_library")
load("@bazel_tools//tools/build_rules/closure:closure_stylesheet_library.bzl", "closure_stylesheet_library")
load("@bazel_tools//tools/build_rules/closure:closure_template_library.bzl", "closure_template_library")
closure_js_binary(
name = "hello",
main = "hello",
deps = [":hello_lib"],
)
closure_js_library(
name = "hello_lib",
srcs = ["hello.js"],
deps = [
"@closure_library//:closure_library",
"@closure_templates//:closure_templates_js",
":hello_css",
":hello_soy",
]
)
closure_stylesheet_library(
name = "hello_css",
srcs = ["hello.gss"],
deps = ["@closure_library//:closure_library_css"],
)
closure_template_library(
name = "hello_soy",
srcs = ["hello.soy"],
)
```
## Known Issues
The version of the Closure Templates compiler that is used will emit warnings
about protected property access and about a missing enum value. These issues
have been fixed in the source, but are not yet available as a downloadable
archive. These warnings are safe to ignore.
You may define a new_local_repository target if you wish to check out the source
from Github yourself. Otherwise you may wish to wait until the Closure tools are
available as Bazel workspaces. e.g.
```python
new_local_repository(
name = "closure_templates",
build_file = "tools/build_rules/closure/closure_templates.BUILD",
path = "/home/user/src/github/google/closure-templates/target",
)
```