# 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", ) ```