Skip to content

Commit a167311

Browse files
authored
feat(examples): show how to use ts_library(use_angular_plugin) with worker mode (#1839)
1 parent 0eda43f commit a167311

File tree

10 files changed

+52
-37
lines changed

10 files changed

+52
-37
lines changed

.bazelrc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ import %workspace%/common.bazelrc
55
# This lets us glob() up all the files inside the examples to make them inputs to tests
66
# To update these lines, just run `yarn bazel:update-deleted-packages`
77
# (Note, we cannot use common --deleted_packages because the bazel version command doesn't support it)
8-
build --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/jest,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/ts_devserver,e2e/ts_devserver/genrule,e2e/ts_devserver/subpackage,e2e/typescript,e2e/webapp
9-
query --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular_bazel_architect,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/jest,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/ts_devserver,e2e/ts_devserver/genrule,e2e/ts_devserver/subpackage,e2e/typescript,e2e/webapp
8+
build --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular_bazel_architect/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular_bazel_architect/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular_view_engine/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/jest,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/ts_devserver,e2e/ts_devserver/genrule,e2e/ts_devserver/subpackage,e2e/typescript,e2e/webapp
9+
query --deleted_packages=examples/angular,examples/angular/e2e,examples/angular/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular/src/app/home,examples/angular/src/app/hello-world,examples/angular/src/app,examples/angular/src/app/todos,examples/angular/src/app/todos/reducers,examples/angular/src/shared/material,examples/angular/src/lib/shorten,examples/angular/src,examples/angular/src/assets,examples/angular/tools,examples/angular_bazel_architect,examples/angular_bazel_architect/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular_bazel_architect/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular_bazel_architect/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular_bazel_architect/projects/frontend-lib,examples/angular_view_engine,examples/angular_view_engine/e2e,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/core/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@angular-devkit/core/third_party/github.com/chalk/supports-color,examples/angular_view_engine/node_modules/@angular-devkit/core/third_party/github.com/sindresorhus/has-flag,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/architect/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@angular-devkit/schematics/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/webSocket,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/operators,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/testing,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src,examples/angular_view_engine/node_modules/@schematics/update/node_modules/rxjs/src/ajax,examples/angular_view_engine/node_modules/@schematics/angular/third_party/github.com/Microsoft/TypeScript,examples/angular_view_engine/src/app/home,examples/angular_view_engine/src/app/hello-world,examples/angular_view_engine/src/app,examples/angular_view_engine/src/app/todos,examples/angular_view_engine/src/app/todos/reducers,examples/angular_view_engine/src/shared/material,examples/angular_view_engine/src/lib/typography,examples/angular_view_engine/src/lib/shorten,examples/angular_view_engine/src,examples/angular_view_engine/src/assets,examples/app,examples/app/styles,examples/app/test,examples/closure,examples/jest,examples/kotlin,examples/nestjs,examples/nestjs/src,examples/parcel,examples/protocol_buffers,examples/react_webpack,examples/user_managed_deps,examples/vendored_node,examples/vendored_node_and_yarn,examples/web_testing,examples/webapp,examples/worker,e2e/bazel_managed_deps,e2e/fine_grained_symlinks,e2e/jasmine,e2e/node_loader_no_preserve_symlinks,e2e/node_loader_preserve_symlinks,e2e/packages,e2e/symlinked_node_modules_npm,e2e/symlinked_node_modules_yarn,e2e/ts_devserver,e2e/ts_devserver/genrule,e2e/ts_devserver/subpackage,e2e/typescript,e2e/webapp
1010

1111
# Mock versioning command to test the --stamp behavior
1212
build --workspace_status_command="echo BUILD_SCM_VERSION 1.2.3"

examples/angular/src/BUILD.bazel

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ load("@npm//html-insert-assets:index.bzl", "html_insert_assets")
88
load("@npm_bazel_rollup//:index.bzl", "rollup_bundle")
99
load("@npm_bazel_terser//:index.bzl", "terser_minified")
1010
load("@npm_bazel_typescript//:index.bzl", "ts_config", "ts_devserver", "ts_library")
11+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
1112

1213
package(default_visibility = ["//:__subpackages__"])
1314

@@ -43,18 +44,15 @@ ts_library(
4344
],
4445
)
4546

46-
ts_library(
47+
ng_ts_library(
4748
name = "src",
4849
srcs = [
4950
"main.dev.ts",
5051
"main.prod.ts",
5152
],
5253
tsconfig = ":tsconfig.json",
53-
use_angular_plugin = True,
5454
deps = [
5555
"//src/app",
56-
# Needed for the angular compiler plugin
57-
"@npm//@angular/compiler-cli",
5856
"@npm//@angular/core",
5957
"@npm//@angular/platform-browser",
6058
"@npm//@angular/router",

examples/angular/src/app/BUILD.bazel

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,40 +1,34 @@
1-
load("@npm_bazel_typescript//:index.bzl", "ts_library")
1+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
22

33
package(default_visibility = ["//:__subpackages__"])
44

5-
ts_library(
5+
ng_ts_library(
66
name = "app",
77
srcs = glob(
88
include = ["*.ts"],
99
exclude = ["app.server.module.ts"],
1010
),
1111
angular_assets = ["app.component.html"],
1212
tsconfig = "//src:tsconfig.json",
13-
use_angular_plugin = True,
1413
deps = [
1514
"//src/app/hello-world",
1615
"//src/app/home",
1716
"//src/app/todos",
1817
"//src/app/todos/reducers",
1918
"//src/shared/material",
20-
# Needed for the angular compiler plugin
21-
"@npm//@angular/compiler-cli",
2219
"@npm//@angular/core",
2320
"@npm//@angular/platform-browser",
2421
"@npm//@angular/router",
2522
"@npm//@ngrx/store",
2623
],
2724
)
2825

29-
ts_library(
26+
ng_ts_library(
3027
name = "app_server",
3128
srcs = ["app.server.module.ts"],
3229
tsconfig = "//src:tsconfig-server",
33-
use_angular_plugin = True,
3430
deps = [
3531
":app",
36-
# Needed for the angular compiler plugin
37-
"@npm//@angular/compiler-cli",
3832
"@npm//@angular/core",
3933
"@npm//@angular/platform-server",
4034
],

examples/angular/src/app/hello-world/BUILD.bazel

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
22
load("@npm_bazel_karma//:index.bzl", "karma_web_test_suite")
33
load("@npm_bazel_typescript//:index.bzl", "ts_library")
4+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
45

56
package(default_visibility = ["//:__subpackages__"])
67

@@ -9,7 +10,7 @@ sass_binary(
910
src = "hello-world.component.scss",
1011
)
1112

12-
ts_library(
13+
ng_ts_library(
1314
name = "hello-world",
1415
srcs = [
1516
"hello-world.component.ts",
@@ -20,12 +21,9 @@ ts_library(
2021
":hello-world-styles",
2122
],
2223
tsconfig = "//src:tsconfig.json",
23-
use_angular_plugin = True,
2424
deps = [
2525
"//src/lib/shorten",
2626
"//src/shared/material",
27-
# Needed for the angular compiler plugin
28-
"@npm//@angular/compiler-cli",
2927
"@npm//@angular/core",
3028
"@npm//@angular/forms",
3129
"@npm//@angular/router",

examples/angular/src/app/home/BUILD.bazel

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,13 @@
1-
load("@npm_bazel_typescript//:index.bzl", "ts_library")
1+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
22

33
package(default_visibility = ["//:__subpackages__"])
44

5-
ts_library(
5+
ng_ts_library(
66
name = "home",
77
srcs = ["home.ts"],
88
angular_assets = ["home.html"],
99
tsconfig = "//src:tsconfig.json",
10-
use_angular_plugin = True,
1110
deps = [
12-
# Needed for the angular compiler plugin
13-
"@npm//@angular/compiler-cli",
1411
"@npm//@angular/core",
1512
"@npm//@angular/router",
1613
],

examples/angular/src/app/todos/BUILD.bazel

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
load("@io_bazel_rules_sass//:defs.bzl", "sass_binary")
2-
load("@npm_bazel_typescript//:index.bzl", "ts_library")
2+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
33

44
package(default_visibility = ["//:__subpackages__"])
55

@@ -8,7 +8,7 @@ sass_binary(
88
src = "todos.component.scss",
99
)
1010

11-
ts_library(
11+
ng_ts_library(
1212
name = "todos",
1313
srcs = [
1414
"todos.component.ts",
@@ -19,12 +19,9 @@ ts_library(
1919
":todos-styles",
2020
],
2121
tsconfig = "//src:tsconfig.json",
22-
use_angular_plugin = True,
2322
deps = [
2423
"//src/app/todos/reducers",
2524
"//src/shared/material",
26-
# Needed for the angular compiler plugin
27-
"@npm//@angular/compiler-cli",
2825
"@npm//@angular/common",
2926
"@npm//@angular/core",
3027
"@npm//@angular/forms",

examples/angular/src/shared/material/BUILD.bazel

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,12 @@
1-
load("@npm_bazel_typescript//:index.bzl", "ts_library")
1+
load("//tools:angular_ts_library.bzl", "ng_ts_library")
22

33
package(default_visibility = ["//:__subpackages__"])
44

5-
ts_library(
5+
ng_ts_library(
66
name = "material",
77
srcs = glob(["*.ts"]),
88
tsconfig = "//src:tsconfig.json",
9-
use_angular_plugin = True,
109
deps = [
11-
# Needed for the angular compiler plugin
12-
"@npm//@angular/compiler-cli",
1310
"@npm//@angular/core",
1411
"@npm//@angular/material",
1512
],

examples/angular/tools/BUILD.bazel

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
load("@build_bazel_rules_nodejs//:index.bzl", "nodejs_binary")
2+
3+
# Custom ts_library compiler that runs tsc_wrapped with angular/compiler-cli statically linked
4+
# This can be used with worker mode because we don't need the linker at runtime to make
5+
# the angular plugin loadable
6+
# Just a clone of @npm//@bazel/typescript/bin:tsc_wrapped with added deps
7+
nodejs_binary(
8+
name = "tsc_wrapped_with_angular",
9+
data = [
10+
"@npm//@angular/compiler-cli",
11+
"@npm//@bazel/typescript",
12+
],
13+
entry_point = "@npm//:node_modules/@bazel/typescript/internal/tsc_wrapped/tsc_wrapped.js",
14+
visibility = ["//:__subpackages__"],
15+
)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
"Shows how to enable both worker mode and use_angular_plugin to make a drop-in replacement for ng_module"
2+
3+
load("@npm_bazel_typescript//:index.bzl", "ts_library")
4+
5+
def ng_ts_library(**kwargs):
6+
ts_library(
7+
compiler = "//tools:tsc_wrapped_with_angular",
8+
supports_workers = True,
9+
use_angular_plugin = True,
10+
**kwargs
11+
)

packages/typescript/src/internal/build_defs.bzl

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ def _compile_action(ctx, inputs, outputs, tsconfig_file, node_opts, description
144144
# because it causes bazel to spawn a new worker for every action
145145
# See https://github.com/bazelbuild/rules_nodejs/issues/1803
146146
# TODO: understand the interaction between linker and workers better
147-
# When using plugins, we need the linker, so we disable workers for that case as well
148-
if ctx.attr.supports_workers and not ctx.attr.use_angular_plugin:
147+
if ctx.attr.supports_workers:
149148
# One at-sign makes this a params-file, enabling the worker strategy.
150149
# Two at-signs escapes the argument so it's passed through to tsc_wrapped
151150
# rather than the contents getting expanded.
@@ -523,4 +522,13 @@ def ts_library_macro(tsconfig = None, **kwargs):
523522
if not tsconfig:
524523
tsconfig = "//:tsconfig.json"
525524

526-
ts_library(tsconfig = tsconfig, **kwargs)
525+
# plugins generally require the linker
526+
# (unless the user statically linked them into the compiler binary)
527+
# Therefore we disable workers for them by default
528+
if "supports_workers" in kwargs.keys():
529+
supports_workers = kwargs.pop("supports_workers")
530+
else:
531+
uses_plugin = kwargs.get("use_angular_plugin", False)
532+
supports_workers = not uses_plugin
533+
534+
ts_library(tsconfig = tsconfig, supports_workers = supports_workers, **kwargs)

0 commit comments

Comments
 (0)