From 955423c79b394f1ea6baac1207eb167fb31f9322 Mon Sep 17 00:00:00 2001 From: Igor Minar Date: Tue, 12 Nov 2019 09:52:34 -0800 Subject: [PATCH] fix(bazel): ng_module should not emit shim files under bazel and Ivy (#33765) Under bazel and Ivy we don't need the shim files to be emmited by default. We still need to the shims for blaze however because google3 code imports them. This improves build latency by 1-2 seconds per ng_module target. PR Close #33765 --- integration/bazel/src/BUILD.bazel | 1 + integration/bazel/src/hello-world/BUILD.bazel | 1 + .../benchmarks/src/class_bindings/BUILD.bazel | 1 + .../benchmarks/src/expanding_rows/BUILD.bazel | 1 + .../benchmarks/src/largeform/ng2/BUILD.bazel | 1 + .../benchmarks/src/largetable/ng2/BUILD.bazel | 1 + .../src/largetable/ng2_switch/BUILD.bazel | 1 + modules/benchmarks/src/tree/ng2/BUILD.bazel | 1 + .../src/tree/ng2_switch/BUILD.bazel | 1 + modules/benchmarks/src/views/BUILD.bazel | 1 + .../builders/files/src/BUILD.bazel.template | 1 + packages/bazel/src/ng_module.bzl | 30 ++++++++++++++----- .../bazel/injectable_def/app/BUILD.bazel | 1 + packages/examples/common/BUILD.bazel | 1 + packages/examples/core/BUILD.bazel | 1 + packages/examples/forms/BUILD.bazel | 1 + .../router/activated-route/BUILD.bazel | 1 + .../examples/service-worker/push/BUILD.bazel | 1 + .../registration-options/BUILD.bazel | 1 + packages/examples/upgrade/upgrade_example.bzl | 1 + .../test/aot_ngsummary_test/BUILD.bazel | 1 + 21 files changed, 43 insertions(+), 7 deletions(-) diff --git a/integration/bazel/src/BUILD.bazel b/integration/bazel/src/BUILD.bazel index bcc424e978..b5fa77975b 100644 --- a/integration/bazel/src/BUILD.bazel +++ b/integration/bazel/src/BUILD.bazel @@ -13,6 +13,7 @@ exports_files(["tsconfig.json"]) ng_module( name = "src", srcs = glob(["*.ts"]), + generate_ve_shims = True, deps = [ "//src/hello-world", "@npm//@angular/common", diff --git a/integration/bazel/src/hello-world/BUILD.bazel b/integration/bazel/src/hello-world/BUILD.bazel index ac31c92e07..0afa1133a2 100644 --- a/integration/bazel/src/hello-world/BUILD.bazel +++ b/integration/bazel/src/hello-world/BUILD.bazel @@ -17,6 +17,7 @@ ng_module( exclude = ["*.spec.ts"], ), assets = [":hello-world-styles"], + generate_ve_shims = True, deps = [ "@npm//@angular/core", "@npm//@types", diff --git a/modules/benchmarks/src/class_bindings/BUILD.bazel b/modules/benchmarks/src/class_bindings/BUILD.bazel index 3d31a6e196..c50b483053 100644 --- a/modules/benchmarks/src/class_bindings/BUILD.bazel +++ b/modules/benchmarks/src/class_bindings/BUILD.bazel @@ -10,6 +10,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), + generate_ve_shims = True, deps = [ "//packages:types", "//packages/common", diff --git a/modules/benchmarks/src/expanding_rows/BUILD.bazel b/modules/benchmarks/src/expanding_rows/BUILD.bazel index ea7b593633..19ba89b5a4 100644 --- a/modules/benchmarks/src/expanding_rows/BUILD.bazel +++ b/modules/benchmarks/src/expanding_rows/BUILD.bazel @@ -10,6 +10,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), + generate_ve_shims = True, deps = [ "//packages:types", "//packages/common", diff --git a/modules/benchmarks/src/largeform/ng2/BUILD.bazel b/modules/benchmarks/src/largeform/ng2/BUILD.bazel index 8ede44f9fe..59f0413ccd 100644 --- a/modules/benchmarks/src/largeform/ng2/BUILD.bazel +++ b/modules/benchmarks/src/largeform/ng2/BUILD.bazel @@ -9,6 +9,7 @@ package(default_visibility = ["//modules/benchmarks:__subpackages__"]) ng_module( name = "ng2", srcs = glob(["*.ts"]), + generate_ve_shims = True, # FIXME-IVY(FW-998): ExpressionTranslatorVisitor#visitWriteKeyExpr is not implemented. tags = ["fixme-ivy-aot"], tsconfig = "//modules/benchmarks:tsconfig-build.json", diff --git a/modules/benchmarks/src/largetable/ng2/BUILD.bazel b/modules/benchmarks/src/largetable/ng2/BUILD.bazel index 4e9cc0a8fa..933b10f7f4 100644 --- a/modules/benchmarks/src/largetable/ng2/BUILD.bazel +++ b/modules/benchmarks/src/largetable/ng2/BUILD.bazel @@ -10,6 +10,7 @@ package(default_visibility = ["//modules/benchmarks:__subpackages__"]) ng_module( name = "ng2", srcs = glob(["*.ts"]), + generate_ve_shims = True, tsconfig = "//modules/benchmarks:tsconfig-build.json", # TODO: FW-1004 Type checking is currently not complete. type_check = False, diff --git a/modules/benchmarks/src/largetable/ng2_switch/BUILD.bazel b/modules/benchmarks/src/largetable/ng2_switch/BUILD.bazel index 73d85effd7..a0a4d2e4b0 100644 --- a/modules/benchmarks/src/largetable/ng2_switch/BUILD.bazel +++ b/modules/benchmarks/src/largetable/ng2_switch/BUILD.bazel @@ -7,6 +7,7 @@ package(default_visibility = ["//modules/benchmarks:__subpackages__"]) ng_module( name = "ng2_switch", srcs = glob(["*.ts"]), + generate_ve_shims = True, tsconfig = "//modules/benchmarks:tsconfig-build.json", # TODO: FW-1004 Type checking is currently not complete. type_check = False, diff --git a/modules/benchmarks/src/tree/ng2/BUILD.bazel b/modules/benchmarks/src/tree/ng2/BUILD.bazel index ca4df157bc..c5fe531e3c 100644 --- a/modules/benchmarks/src/tree/ng2/BUILD.bazel +++ b/modules/benchmarks/src/tree/ng2/BUILD.bazel @@ -10,6 +10,7 @@ package(default_visibility = ["//modules/benchmarks:__subpackages__"]) ng_module( name = "ng2", srcs = glob(["*.ts"]), + generate_ve_shims = True, tsconfig = "//modules/benchmarks:tsconfig-build.json", # TODO: FW-1004 Type checking is currently not complete. type_check = False, diff --git a/modules/benchmarks/src/tree/ng2_switch/BUILD.bazel b/modules/benchmarks/src/tree/ng2_switch/BUILD.bazel index 75ca9fe25d..17844d3970 100644 --- a/modules/benchmarks/src/tree/ng2_switch/BUILD.bazel +++ b/modules/benchmarks/src/tree/ng2_switch/BUILD.bazel @@ -7,6 +7,7 @@ package(default_visibility = ["//modules/benchmarks:__subpackages__"]) ng_module( name = "ng2_switch", srcs = glob(["*.ts"]), + generate_ve_shims = True, tsconfig = "//modules/benchmarks:tsconfig-build.json", # TODO: FW-1004 Type checking is currently not complete. type_check = False, diff --git a/modules/benchmarks/src/views/BUILD.bazel b/modules/benchmarks/src/views/BUILD.bazel index f6f3e0a197..aacd52d789 100644 --- a/modules/benchmarks/src/views/BUILD.bazel +++ b/modules/benchmarks/src/views/BUILD.bazel @@ -9,6 +9,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*.spec.ts"], ), + generate_ve_shims = True, deps = [ "//packages:types", "//packages/common", diff --git a/packages/bazel/src/builders/files/src/BUILD.bazel.template b/packages/bazel/src/builders/files/src/BUILD.bazel.template index 55ce79d62e..442e9ffa8b 100644 --- a/packages/bazel/src/builders/files/src/BUILD.bazel.template +++ b/packages/bazel/src/builders/files/src/BUILD.bazel.template @@ -38,6 +38,7 @@ ng_module( "**/*.css", "**/*.html", ]) + ([":styles"] if len(glob(["**/*.scss"])) else []), + generate_ve_shims = True, deps = [ "@npm//@angular/core", "@npm//@angular/platform-browser", diff --git a/packages/bazel/src/ng_module.bzl b/packages/bazel/src/ng_module.bzl index fa7734c0c3..0c8fc222c4 100644 --- a/packages/bazel/src/ng_module.bzl +++ b/packages/bazel/src/ng_module.bzl @@ -208,11 +208,14 @@ def _expected_outs(ctx): if short_path.endswith(".ts") and not short_path.endswith(".d.ts"): basename = short_path[len(package_prefix):-len(".ts")] if (len(factory_basename_set.to_list()) == 0 or basename in factory_basename_set.to_list()): - devmode_js = [ - ".ngfactory.js", - ".ngsummary.js", - ".js", - ] + if _generate_ve_shims(ctx): + devmode_js = [ + ".ngfactory.js", + ".ngsummary.js", + ".js", + ] + else: + devmode_js = [".js"] # Only ngc produces .json files, they're not needed in Ivy. if is_legacy_ngc: @@ -293,7 +296,18 @@ def _expected_outs(ctx): i18n_messages = i18n_messages_files, ) +# Determines if we need to generate View Engine shims (.ngfactory and .ngsummary files) +def _generate_ve_shims(ctx): + # we are checking the workspace name here, because otherwise this would be a breaking change + # (the shims used to be on by default) + # we can remove this check once angular/components and angular/angular-cli repos no longer depend + # on the presence of shims, or if they explicitly opt-in to their generation via ng_modules' generate_ve_shims attr + return _is_bazel() and _is_view_engine_enabled(ctx) or ( + getattr(ctx.attr, "generate_ve_shims", False) == True or ctx.workspace_name != "angular" + ) + def _ngc_tsconfig(ctx, files, srcs, **kwargs): + generate_ve_shims = _generate_ve_shims(ctx) outs = _expected_outs(ctx) is_legacy_ngc = _is_view_engine_enabled(ctx) if "devmode_manifest" in kwargs: @@ -305,8 +319,8 @@ def _ngc_tsconfig(ctx, files, srcs, **kwargs): "enableResourceInlining": ctx.attr.inline_resources, "generateCodeForLibraries": False, "allowEmptyCodegenFiles": True, - "generateNgFactoryShims": True, - "generateNgSummaryShims": True, + "generateNgFactoryShims": True if generate_ve_shims else False, + "generateNgSummaryShims": True if generate_ve_shims else False, # Summaries are only enabled if Angular outputs are to be produced. "enableSummariesForJit": is_legacy_ngc, "enableIvy": _is_ivy_enabled(ctx), @@ -771,6 +785,8 @@ NG_MODULE_RULE_ATTRS = dict(dict(COMMON_ATTRIBUTES, **NG_MODULE_ATTRIBUTES), **{ executable = True, cfg = "host", ), + # Should the rule generate ngfactory and ngsummary shim files? + "generate_ve_shims": attr.bool(default = False), }) ng_module = rule( diff --git a/packages/compiler-cli/integrationtest/bazel/injectable_def/app/BUILD.bazel b/packages/compiler-cli/integrationtest/bazel/injectable_def/app/BUILD.bazel index a692dcbd9f..51520c6e29 100644 --- a/packages/compiler-cli/integrationtest/bazel/injectable_def/app/BUILD.bazel +++ b/packages/compiler-cli/integrationtest/bazel/injectable_def/app/BUILD.bazel @@ -10,6 +10,7 @@ ng_module( "src/**/*.ts", ], ), + generate_ve_shims = True, module_name = "app_built", deps = [ "//packages/compiler-cli/integrationtest/bazel/injectable_def/lib2", diff --git a/packages/examples/common/BUILD.bazel b/packages/examples/common/BUILD.bazel index 552dc825ef..d048b59e14 100644 --- a/packages/examples/common/BUILD.bazel +++ b/packages/examples/common/BUILD.bazel @@ -9,6 +9,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/core/BUILD.bazel b/packages/examples/core/BUILD.bazel index 7b74d1738a..212ec97079 100644 --- a/packages/examples/core/BUILD.bazel +++ b/packages/examples/core/BUILD.bazel @@ -12,6 +12,7 @@ ng_module( "**/*_howto.ts", ], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/forms/BUILD.bazel b/packages/examples/forms/BUILD.bazel index 367aa52f2d..2166e514bc 100644 --- a/packages/examples/forms/BUILD.bazel +++ b/packages/examples/forms/BUILD.bazel @@ -9,6 +9,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/router/activated-route/BUILD.bazel b/packages/examples/router/activated-route/BUILD.bazel index f55d990320..9abc261f20 100644 --- a/packages/examples/router/activated-route/BUILD.bazel +++ b/packages/examples/router/activated-route/BUILD.bazel @@ -8,6 +8,7 @@ ng_module( srcs = glob( ["**/*.ts"], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/service-worker/push/BUILD.bazel b/packages/examples/service-worker/push/BUILD.bazel index fc0d167395..32062c838c 100644 --- a/packages/examples/service-worker/push/BUILD.bazel +++ b/packages/examples/service-worker/push/BUILD.bazel @@ -9,6 +9,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/service-worker/registration-options/BUILD.bazel b/packages/examples/service-worker/registration-options/BUILD.bazel index ad62153d4e..12e392dfd6 100644 --- a/packages/examples/service-worker/registration-options/BUILD.bazel +++ b/packages/examples/service-worker/registration-options/BUILD.bazel @@ -9,6 +9,7 @@ ng_module( ["**/*.ts"], exclude = ["**/*_spec.ts"], ), + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/examples/upgrade/upgrade_example.bzl b/packages/examples/upgrade/upgrade_example.bzl index 51928ead15..8878aa7d8b 100644 --- a/packages/examples/upgrade/upgrade_example.bzl +++ b/packages/examples/upgrade/upgrade_example.bzl @@ -12,6 +12,7 @@ def create_upgrade_example_targets(name, srcs, e2e_srcs, entry_module, assets = ng_module( name = "%s_sources" % name, srcs = srcs, + generate_ve_shims = True, # TODO: FW-1004 Type checking is currently not complete. type_check = False, deps = [ diff --git a/packages/router/test/aot_ngsummary_test/BUILD.bazel b/packages/router/test/aot_ngsummary_test/BUILD.bazel index 7f8646ada7..fc804c6b82 100644 --- a/packages/router/test/aot_ngsummary_test/BUILD.bazel +++ b/packages/router/test/aot_ngsummary_test/BUILD.bazel @@ -4,6 +4,7 @@ ng_module( name = "aot_routing_module", testonly = True, srcs = ["aot_router_module.ts"], + generate_ve_shims = True, deps = [ "//packages/core", "//packages/router",