mirror of
https://github.com/angular/angular.git
synced 2026-09-14 13:54:52 +08:00
e7e5a0adc6
This is basically a pre-step for combining devmode and prodmode into a
single compilation. We are already achieving this now, and can claim
with confidence that we reduced possible actions by half. This is
especially important now that prodmode is used more often, but rules
potentially still using the devmode ESM sources. We can avoid double
compilations (which existed before the whole ESM migration too!).
We will measure this more when we have more concrete documentation
of the changes & a better planning document.
Changes:
* ts_library will no longer generate devmode `d.ts`. Definitions are
generated as part of prodmode. That way only prodmode can be exposed
via providers.
* applied the same to `ng_module`.
* updates migrations to bundle because *everything* using `ts_library`
is now ESM. This is actually also useful in the future if
schematics rely on e.g. the compiler.
* updates schematics for localize to also bundle. similar reason as
above.
PR Close #48538
226 lines
10 KiB
Python
226 lines
10 KiB
Python
load("@build_bazel_rules_nodejs//:index.bzl", "npm_package_bin")
|
|
load("@aspect_bazel_lib//lib:copy_to_directory.bzl", "copy_to_directory")
|
|
load("//tools:defaults.bzl", "nodejs_test")
|
|
load("//:yarn.bzl", "YARN_LABEL")
|
|
load("//:packages.bzl", "AIO_EXAMPLE_PACKAGES", "to_package_label")
|
|
|
|
# This map controls which examples are included and whether or not to generate
|
|
# a stackblitz live examples and zip archives. Keys are the example name, and values
|
|
# take the form:
|
|
#
|
|
# {"stackblitz": boolean, "zip": boolean}
|
|
#
|
|
# Set "stackblitz" to True to generate live examples from any stackblitz config files
|
|
# found in the example. Set "zip" to True to generate archives for any stackblitz or
|
|
# zipper configuration file found in the example.
|
|
#
|
|
# To ignore an example, comment out its row.
|
|
|
|
EXAMPLES = {
|
|
"accessibility": {"stackblitz": True, "zip": True},
|
|
"ajs-quick-reference": {"stackblitz": True, "zip": True},
|
|
"angular-compiler-options": {"stackblitz": True, "zip": True},
|
|
"animations": {"stackblitz": True, "zip": True},
|
|
"architecture": {"stackblitz": True, "zip": True},
|
|
"attribute-binding": {"stackblitz": True, "zip": True},
|
|
"attribute-directives": {"stackblitz": True, "zip": True},
|
|
"binding-syntax": {"stackblitz": True, "zip": True},
|
|
"bootstrapping": {"stackblitz": True, "zip": True},
|
|
"built-in-directives": {"stackblitz": True, "zip": True},
|
|
"built-in-template-functions": {"stackblitz": True, "zip": True},
|
|
"comparing-observables": {"stackblitz": False, "zip": False},
|
|
"component-interaction": {"stackblitz": True, "zip": True},
|
|
"component-overview": {"stackblitz": True, "zip": True},
|
|
"component-styles": {"stackblitz": True, "zip": True},
|
|
"content-projection": {"stackblitz": True, "zip": True},
|
|
"dependency-injection": {"stackblitz": True, "zip": True},
|
|
"dependency-injection-in-action": {"stackblitz": True, "zip": True},
|
|
"deprecation-guide": {"stackblitz": True, "zip": True},
|
|
"displaying-data": {"stackblitz": True, "zip": True},
|
|
"docs-style-guide": {"stackblitz": True, "zip": True},
|
|
"dynamic-component-loader": {"stackblitz": True, "zip": True},
|
|
"dynamic-form": {"stackblitz": True, "zip": True},
|
|
"elements": {"stackblitz": True, "zip": True},
|
|
"event-binding": {"stackblitz": True, "zip": True},
|
|
"feature-modules": {"stackblitz": True, "zip": True},
|
|
"form-validation": {"stackblitz": True, "zip": True},
|
|
"forms": {"stackblitz": True, "zip": True},
|
|
"forms-overview": {"stackblitz": True, "zip": True},
|
|
"getting-started": {"stackblitz": True, "zip": True},
|
|
"getting-started-v0": {"stackblitz": True, "zip": True},
|
|
"hierarchical-dependency-injection": {"stackblitz": True, "zip": True},
|
|
"http": {"stackblitz": True, "zip": True},
|
|
"i18n": {"stackblitz": True, "zip": True},
|
|
"inputs-outputs": {"stackblitz": True, "zip": True},
|
|
"interpolation": {"stackblitz": True, "zip": True},
|
|
"lazy-loading-ngmodules": {"stackblitz": True, "zip": True},
|
|
"lifecycle-hooks": {"stackblitz": True, "zip": True},
|
|
"ngcontainer": {"stackblitz": True, "zip": True},
|
|
"ngmodules": {"stackblitz": True, "zip": True},
|
|
"observables": {"stackblitz": False, "zip": False},
|
|
"observables-in-angular": {"stackblitz": False, "zip": False},
|
|
"pipes": {"stackblitz": True, "zip": True},
|
|
"practical-observable-usage": {"stackblitz": False, "zip": False},
|
|
"property-binding": {"stackblitz": True, "zip": True},
|
|
"providers": {"stackblitz": True, "zip": True},
|
|
"providers-viewproviders": {"stackblitz": True, "zip": True},
|
|
"reactive-forms": {"stackblitz": True, "zip": True},
|
|
"resolution-modifiers": {"stackblitz": True, "zip": True},
|
|
"router": {"stackblitz": True, "zip": True},
|
|
"router-tutorial": {"stackblitz": True, "zip": True},
|
|
"routing-with-urlmatcher": {"stackblitz": True, "zip": True},
|
|
"rx-library": {"stackblitz": False, "zip": False},
|
|
"schematics-for-libraries": {"stackblitz": False, "zip": True},
|
|
"security": {"stackblitz": True, "zip": True},
|
|
"service-worker-getting-started": {"stackblitz": False, "zip": False},
|
|
"setup": {"stackblitz": False, "zip": False},
|
|
"structural-directives": {"stackblitz": True, "zip": True},
|
|
"styleguide": {"stackblitz": False, "zip": False},
|
|
"template-expression-operators": {"stackblitz": True, "zip": True},
|
|
"template-reference-variables": {"stackblitz": True, "zip": True},
|
|
"template-syntax": {"stackblitz": True, "zip": True},
|
|
"testing": {"stackblitz": True, "zip": True},
|
|
"toh-pt0": {"stackblitz": True, "zip": True},
|
|
"toh-pt1": {"stackblitz": True, "zip": True},
|
|
"toh-pt2": {"stackblitz": True, "zip": True},
|
|
"toh-pt3": {"stackblitz": True, "zip": True},
|
|
"toh-pt4": {"stackblitz": True, "zip": True},
|
|
"toh-pt5": {"stackblitz": True, "zip": True},
|
|
"toh-pt6": {"stackblitz": True, "zip": True},
|
|
"two-way-binding": {"stackblitz": True, "zip": True},
|
|
"universal": {"stackblitz": False, "zip": True},
|
|
"upgrade-lazy-load-ajs": {"stackblitz": False, "zip": True},
|
|
"upgrade-module": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-1-typescript": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-2-hybrid": {"stackblitz": False, "zip": False},
|
|
"upgrade-phonecat-3-final": {"stackblitz": False, "zip": False},
|
|
"user-input": {"stackblitz": True, "zip": True},
|
|
"view-encapsulation": {"stackblitz": True, "zip": True},
|
|
"what-is-angular": {"stackblitz": True, "zip": True},
|
|
}
|
|
|
|
def docs_example(name, test = True, test_tags = [], test_exec_properties = {}, flaky = False):
|
|
"""Stamp targets for adding boilerplate to examples, creating live examples, and creating zips.
|
|
|
|
Args:
|
|
name: name of the example
|
|
test: whether to run e2e tests
|
|
test_tags: tags to add to the test target
|
|
test_exec_properties: exec properties to add to the test's execution platform
|
|
"""
|
|
if name not in EXAMPLES:
|
|
# buildifier: disable=print
|
|
print("WARNING: Example '%s' is being ignored. To include it, add an entry to the EXAMPLES map in aio/content/examples/examples.bzl." % name)
|
|
return
|
|
|
|
native.filegroup(
|
|
name = "files",
|
|
srcs = native.glob(["**"], exclude = [
|
|
"BUILD.bazel",
|
|
"**/node_modules/**", # Node modules may exist from the legacy setup.
|
|
]),
|
|
)
|
|
|
|
# Generate example boilerplate
|
|
npm_package_bin(
|
|
name = "boilerplate",
|
|
args = ["add", native.package_name(), "$(@D)"],
|
|
data = [":files"],
|
|
output_dir = True,
|
|
tool = "//aio/tools/examples:example-boilerplate",
|
|
)
|
|
|
|
# Copy example files and boilerplate to the output tree
|
|
copy_to_directory(
|
|
name = name,
|
|
# Prevent sorting so that boilerplate overwrites example sources
|
|
# buildifier: do not sort
|
|
srcs = [
|
|
":files",
|
|
":boilerplate",
|
|
],
|
|
replace_prefixes = {
|
|
"boilerplate": "",
|
|
"aio/tools/examples/shared": "",
|
|
},
|
|
allow_overwrites = True,
|
|
)
|
|
|
|
stackblitz_configs = native.glob(["*stackblitz.json"])
|
|
|
|
if EXAMPLES[name]["stackblitz"] and len(stackblitz_configs) > 0:
|
|
# Generate stackblitz live example(s)
|
|
outs = [file_name.replace(".json", ".html") for file_name in stackblitz_configs]
|
|
npm_package_bin(
|
|
name = "stackblitz",
|
|
args = [
|
|
"$(execpath :%s)" % name,
|
|
"$(RULEDIR)",
|
|
],
|
|
data = [":%s" % name],
|
|
outs = outs,
|
|
tool = "//aio/tools/stackblitz-builder:generate-stackblitz",
|
|
)
|
|
|
|
zip_configs = stackblitz_configs + native.glob(["zipper.json"])
|
|
|
|
if EXAMPLES[name]["zip"] and len(zip_configs) > 0:
|
|
# Generate example zip(s)
|
|
outs = [file_name.replace("stackblitz", name).replace("zipper", name).replace(".json", ".zip") for file_name in zip_configs]
|
|
npm_package_bin(
|
|
name = "example-zip",
|
|
args = [
|
|
"$(execpath :%s)" % name,
|
|
"$(RULEDIR)",
|
|
],
|
|
data = [":%s" % name],
|
|
outs = outs,
|
|
tool = "//aio/tools/example-zipper:generate-example-zip",
|
|
)
|
|
|
|
if test:
|
|
EXAMPLE_DEPS_WORKSPACE_NAME = "aio_example_deps"
|
|
|
|
LOCAL_PACKAGE_DEPS = [to_package_label(dep) for dep in AIO_EXAMPLE_PACKAGES]
|
|
|
|
# Local package deps are passed as args to the test script in the form "@package/name#path/to/package"
|
|
# for the script's convenience.
|
|
LOCAL_PACKAGE_ARGS = ["--localPackage=%s#$(rootpath %s)" % (dep, to_package_label(dep)) for dep in AIO_EXAMPLE_PACKAGES]
|
|
|
|
nodejs_test(
|
|
name = "e2e",
|
|
data = [
|
|
":%s" % name,
|
|
YARN_LABEL,
|
|
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium",
|
|
"//aio/tools/examples:run-example-e2e",
|
|
"//aio/tools:windows-chromium-path",
|
|
# We install the whole node modules for runtime deps of e2e tests
|
|
"@{workspace}//:node_modules_files".format(workspace = EXAMPLE_DEPS_WORKSPACE_NAME),
|
|
] + select({
|
|
"//aio:aio_local_deps": LOCAL_PACKAGE_DEPS,
|
|
"//conditions:default": [],
|
|
}),
|
|
args = [
|
|
"$(rootpath :%s)" % name,
|
|
"$(rootpath %s)" % YARN_LABEL,
|
|
EXAMPLE_DEPS_WORKSPACE_NAME,
|
|
] + select({
|
|
"//aio:aio_local_deps": LOCAL_PACKAGE_ARGS,
|
|
"//conditions:default": [],
|
|
}),
|
|
entry_point = "//aio/tools/examples:run-example-e2e.mjs",
|
|
env = {
|
|
"CHROME_BIN": "$(CHROMIUM)",
|
|
"CHROMEDRIVER_BIN": "$(CHROMEDRIVER)",
|
|
},
|
|
toolchains = [
|
|
"@aio_npm//@angular/build-tooling/bazel/browsers/chromium:toolchain_alias",
|
|
],
|
|
exec_properties = test_exec_properties,
|
|
flaky = flaky,
|
|
# RBE complains about superseeding the max inputs limit (70,000) due to the
|
|
# size of the input tree.
|
|
tags = ["no-remote-exec"] + test_tags,
|
|
)
|