101 lines
3.9 KiB
Python
101 lines
3.9 KiB
Python
# Copyright Google LLC All Rights Reserved.
|
|
#
|
|
# Use of this source code is governed by an MIT-style license that can be
|
|
# found in the LICENSE file at https://angular.io/license
|
|
|
|
load("@build_bazel_rules_nodejs//:index.bzl", "npm_package_bin")
|
|
load("@npm_bazel_terser//:index.bzl", "terser_minified")
|
|
load("@npm_bazel_rollup//:index.bzl", "rollup_bundle")
|
|
load("//dev-infra/bazel:expand_template.bzl", "expand_template")
|
|
|
|
def ng_rollup_bundle(
|
|
name,
|
|
entry_point,
|
|
deps = [],
|
|
license_banner = None,
|
|
build_optimizer = True,
|
|
visibility = None,
|
|
format = "iife",
|
|
globals = {},
|
|
**kwargs):
|
|
"""Rollup with Build Optimizer on target prodmode output (ESM2015).
|
|
|
|
This provides an extension of the [rollup_bundle] rule that works better for Angular apps.
|
|
|
|
Runs [rollup], [terser_minified] and [brotli] to produce a number of output bundles.
|
|
|
|
es2015 : "%{name}.js"
|
|
es2015 minified : "%{name}.min.js"
|
|
es2015 minified (compressed) : "%{name}.min.js.br",
|
|
es2015 minified (debug) : "%{name}.min_debug.js"
|
|
|
|
It registers `@angular-devkit/build-optimizer` as a rollup plugin by default. This helps
|
|
with further optimization. See https://github.com/angular/angular-cli/tree/master/packages/angular_devkit/build_optimizer.
|
|
|
|
[rollup_bundle]: https://github.com/bazelbuild/rules_nodejs/blob/1.x/packages/rollup/src/rollup_bundle.bzl
|
|
[rollup]: https://rollupjs.org/guide/en/
|
|
[terser_minified]: https://bazelbuild.github.io/rules_nodejs/Terser.html
|
|
[brotli]: https://brotli.org/
|
|
"""
|
|
|
|
config_data = [license_banner] if license_banner else []
|
|
|
|
expand_template(
|
|
name = "%s_rollup_config" % name,
|
|
template = "//dev-infra/benchmark/ng_rollup_bundle:rollup.config-tmpl.js",
|
|
output_name = "%s_rollup_config.js" % name,
|
|
configuration_env_vars = ["angular_ivy_enabled"],
|
|
data = config_data,
|
|
substitutions = {
|
|
"TMPL_build_optimizer": "true" if build_optimizer else "false",
|
|
"TMPL_banner_file": "\"$(execpath %s)\"" % license_banner if license_banner else "undefined",
|
|
"TMPL_external": ", ".join(["'%s'" % e for e in globals.keys()]),
|
|
"TMPL_globals": ", ".join(["'%s': '%s'" % (g, g) for g in globals]),
|
|
},
|
|
visibility = visibility,
|
|
)
|
|
|
|
rollup_bundle(
|
|
name = name,
|
|
config_file = "%s_rollup_config" % name,
|
|
entry_points = {
|
|
(entry_point): name,
|
|
},
|
|
visibility = visibility,
|
|
deps = config_data + deps + [
|
|
"@npm//rollup-plugin-node-resolve",
|
|
"@npm//rollup-plugin-sourcemaps",
|
|
"@npm//rollup-plugin-commonjs",
|
|
"@npm//@angular-devkit/build-optimizer",
|
|
],
|
|
silent = True,
|
|
format = format,
|
|
sourcemap = "true",
|
|
**kwargs
|
|
)
|
|
|
|
common_terser_options = {
|
|
"visibility": visibility,
|
|
"config_file": "//dev-infra/benchmark/ng_rollup_bundle:terser_config.json",
|
|
# TODO: Enable source maps for better debugging when `@bazel/terser` pre-declares
|
|
# JS and map outputs. Tracked with: DEV-120
|
|
"sourcemap": False,
|
|
}
|
|
|
|
terser_minified(name = name + ".min", src = name + ".js", **common_terser_options)
|
|
native.filegroup(name = name + ".min.js", srcs = [name + ".min"], visibility = visibility)
|
|
terser_minified(name = name + ".min_debug", src = name + ".js", debug = True, **common_terser_options)
|
|
native.filegroup(name = name + ".min_debug.js", srcs = [name + ".min_debug"], visibility = visibility)
|
|
|
|
npm_package_bin(
|
|
name = "_%s_brotli" % name,
|
|
tool = "//dev-infra/benchmark/brotli-cli",
|
|
data = [name + ".min.js"],
|
|
outs = [name + ".min.js.br"],
|
|
args = [
|
|
"--output=$(execpath %s.min.js.br)" % name,
|
|
"$(execpath %s.min.js)" % name,
|
|
],
|
|
visibility = visibility,
|
|
)
|