![]() | ![]() | |
| Bazel | Typescript | rules_closure |
Strongly typed typescript goes in, optimized & minified javascript comes out 🉐.
| Name | Description |
|---|---|
| typescript_repositories | Load dependencies for this repository. |
| ts_library | Invoke the typescript compiler on a set of *.ts files to generate a set of *.js files. |
| ts_binary | Optimize and minify a set of *.js files with closure compiler via rules_closure. |
Status: PROOF OF CONCEPT. It probably only works under very narrow conditions at the moment.
Prerequisite: java8 and bazel should installed on your system.
git_repository(
name="io_bazel_rules_closure",
remote="https://github.com/bazelbuild/rules_closure",
tag="0.4.0",
)This brings in rules_closure, which is actually a different front-end to the closure compiler with additional type checking and goodies.
git_repository(
name="org_pubref_rules_node",
remote="https://github.com/pubref/rules_node",
commit=HEAD, # replace with latest version
)This brings in an independent copy of node, typescript (2.1.4), and tsickle (0.21.0, experimental).
git_repository(
name="org_pubref_rules_typescript",
remote="https://github.com/pubref/rules_typescript",
commit=HEAD, # replace with latest version
)
load("@org_pubref_rules_typescript//ts:rules.bzl", "ts_repositories")
ts_repositories()Compile typescript files with tsc, the typescript compiler.
load("@org_pubref_rules_typescript//ts:rules.bzl", "ts_library")
ts_library(
name="lib",
srcs= [
"a.ts",
"b.ts",
"c.ts",
],
# Optional tsconfig file. If provided, you don't need to specify 'files'.ts_config="tsconfig.json",
)Compile generated javascript from ts_library dependencies into single
minified output via the closure_js_binary rule.
load("@org_pubref_rules_typescript//ts:rules.bzl", "ts_binary")
ts_binary(
name="app",
deps= [
":lib",
],
)The generated file will take the form:
var{TS_BINARY_RULE_NAME}=function(){%output%};Therefore, you can invoke the entry point for the minified bundle:
<html><head><scriptsrc="{TS_BINARY_RULE_NAME}.js"></script></head>
...
<script>{TS_BINARY_RULE_NAME}();</script></html>
