angular/packages/compiler-cli/BUILD.bazel
Paul Gschwendtner 4b641a914b build: enable code splitting for esbuild bundling of compiler-cli (#43932)
Enables code spitting for ESBuild bundling of the compiler-cli. When
we initially configured ESBuild as part of APF v13, we left this option
disabled as code splitting is marked experimental. The ESM splitting
mechanism in ESBuild seems very solid so far (judging subjectively
and by experience/reports in the ESBuild repo), so we should give
it a shot, in order to significantly reduce the size of the NPM package,
and simplify debugging (by not having duplicated code portions for all
the different entry points).

To clarify: Code splitting is helpful as we have multiple entry-points
that currently duplicate code. With code splitting these entry-points
would share common code instead.

PR Close #43932
2021-10-26 23:58:27 +00:00

168 lines
4.9 KiB
Text

load("//tools:defaults.bzl", "api_golden_test", "pkg_npm", "ts_config", "ts_library")
load("@npm//@bazel/esbuild:index.bzl", "esbuild", "esbuild_config")
load("//tools:extract_typings_rule.bzl", "extract_typings")
# Load ng_perf_flag explicitly from ng_perf.bzl as it's private API, and not exposed to other
# consumers of @angular/bazel.
load("//packages/bazel/src:ng_perf.bzl", "ng_perf_flag")
package(default_visibility = ["//visibility:public"])
PUBLIC_TARGETS = [
":compiler-cli",
"//packages/compiler-cli/private",
"//packages/compiler-cli/ngcc",
"//packages/compiler-cli/linker",
"//packages/compiler-cli/linker/babel",
]
esbuild_config(
name = "esbuild_config",
config_file = "esbuild.config.js",
)
esbuild(
name = "bundles",
config = ":esbuild_config",
entry_points = [
":index.ts",
"//packages/compiler-cli:src/bin/ngc.ts",
"//packages/compiler-cli/ngcc:main-ngcc.ts",
"//packages/compiler-cli/ngcc:index.ts",
"//packages/compiler-cli:src/bin/ng_xi18n.ts",
"//packages/compiler-cli/linker:index.ts",
"//packages/compiler-cli/linker/babel:index.ts",
"//packages/compiler-cli/private:bazel.ts",
"//packages/compiler-cli/private:localize.ts",
"//packages/compiler-cli/private:migrations.ts",
"//packages/compiler-cli/private:tooling.ts",
"//packages/compiler-cli/ngcc:src/locking/lock_file_with_child_process/ngcc_lock_unlocker.ts",
"//packages/compiler-cli/ngcc:src/execution/cluster/ngcc_cluster_worker.ts",
],
external = [
"@angular/compiler",
"typescript",
"tsickle",
"@babel/core",
"reflect-metadata",
"canonical-path",
"chokidar",
"convert-source-map",
"dependency-graph",
"magic-string",
"semver",
"source-map",
"sourcemap-codec",
"tslib",
"yargs",
],
format = "esm",
platform = "node",
splitting = True,
target = "node12",
deps = PUBLIC_TARGETS,
)
ts_config(
name = "tsconfig",
src = "tsconfig-build.json",
deps = ["//packages:tsconfig-build.json"],
)
ts_library(
name = "import_meta_url_types",
srcs = ["import_meta_url.d.ts"],
)
ts_library(
name = "compiler-cli",
srcs = glob(
[
"*.ts",
"src/**/*.ts",
],
exclude = [
"import_meta_url.d.ts",
"src/integrationtest/**/*.ts",
],
),
tsconfig = ":tsconfig",
deps = [
":import_meta_url_types",
"//packages/compiler",
"//packages/compiler-cli/private",
"//packages/compiler-cli/src/ngtsc/core",
"//packages/compiler-cli/src/ngtsc/core:api",
"//packages/compiler-cli/src/ngtsc/diagnostics",
"//packages/compiler-cli/src/ngtsc/file_system",
"//packages/compiler-cli/src/ngtsc/incremental",
"//packages/compiler-cli/src/ngtsc/indexer",
"//packages/compiler-cli/src/ngtsc/logging",
"//packages/compiler-cli/src/ngtsc/perf",
"//packages/compiler-cli/src/ngtsc/program_driver",
"//packages/compiler-cli/src/ngtsc/reflection",
"//packages/compiler-cli/src/ngtsc/shims",
"//packages/compiler-cli/src/ngtsc/translator",
"//packages/compiler-cli/src/ngtsc/typecheck",
"//packages/compiler-cli/src/ngtsc/typecheck/api",
"//packages/compiler-cli/src/transformers/downlevel_decorators_transform",
"@npm//@bazel/typescript",
"@npm//@types/node",
"@npm//@types/yargs",
"@npm//chokidar",
"@npm//reflect-metadata",
"@npm//tsickle",
"@npm//typescript",
],
)
extract_typings(
name = "api_type_definitions",
deps = PUBLIC_TARGETS,
)
pkg_npm(
name = "npm_package",
srcs = [
"package.json",
],
tags = [
"release-with-framework",
],
# Do not add more to this list.
# Dependencies on the full npm_package cause long re-builds.
visibility = [
"//integration:__pkg__",
"//packages/compiler-cli/integrationtest:__pkg__",
],
deps = [
":api_type_definitions",
":bundles",
],
)
api_golden_test(
name = "error_code_api",
data = [
":npm_package",
"//goldens:public-api",
],
entry_point = "angular/packages/compiler-cli/npm_package/src/ngtsc/diagnostics/src/error_code.d.ts",
golden = "angular/goldens/public-api/compiler-cli/error_code.md",
)
api_golden_test(
name = "compiler_options_api",
data = [
":npm_package",
"//goldens:public-api",
],
entry_point = "angular/packages/compiler-cli/npm_package/src/ngtsc/core/api/src/public_options.d.ts",
golden = "angular/goldens/public-api/compiler-cli/compiler_options.md",
)
# Controls whether the Ivy compiler produces performance traces as part of each build
ng_perf_flag(
name = "ng_perf",
build_setting_default = False,
)