Skip to content

Commit 3c0819f

Browse files
author
Jason Bedard
committed
feat(rollup): provide output groupings of js+map for each bundle type
1 parent 3b5fa13 commit 3c0819f

File tree

3 files changed

+186
-68
lines changed

3 files changed

+186
-68
lines changed

internal/e2e/rollup/BUILD.bazel

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,3 +35,47 @@ jasmine_node_test(
3535
"@npm//unidiff",
3636
],
3737
)
38+
39+
filegroup(
40+
name = "bundle-outputgroups-cjs",
41+
srcs = [":bundle"],
42+
output_group = "cjs",
43+
)
44+
45+
filegroup(
46+
name = "bundle-outputgroups-umd",
47+
srcs = [":bundle"],
48+
output_group = "umd",
49+
)
50+
51+
filegroup(
52+
name = "bundle-outputgroups-es5_min_debug",
53+
srcs = [":bundle"],
54+
output_group = "es5_min_debug",
55+
)
56+
57+
filegroup(
58+
name = "bundle-outputgroups-es5_min",
59+
srcs = [":bundle"],
60+
output_group = "es5_min",
61+
)
62+
63+
jasmine_node_test(
64+
name = "test-outputgroups",
65+
srcs = glob(["*.spec.js"]),
66+
configuration_env_vars = ["UPDATE_GOLDEN"],
67+
data = glob([
68+
"*_golden.js_",
69+
"*_golden.js.map",
70+
]) + [
71+
":bundle-outputgroups-cjs",
72+
":bundle-outputgroups-umd",
73+
":bundle-outputgroups-es5_min",
74+
":bundle-outputgroups-es5_min_debug",
75+
],
76+
deps = [
77+
"//internal/e2e:check_lib",
78+
"@npm//jasmine",
79+
"@npm//unidiff",
80+
],
81+
)

internal/e2e/rollup_code_splitting/BUILD.bazel

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,3 +26,45 @@ jasmine_node_test(
2626
"@npm//unidiff",
2727
],
2828
)
29+
30+
filegroup(
31+
name = "bundle-outputgroups-es2015",
32+
srcs = [":bundle"],
33+
output_group = "es2015",
34+
)
35+
36+
filegroup(
37+
name = "bundle-outputgroups-es5",
38+
srcs = [":bundle"],
39+
output_group = "es5",
40+
)
41+
42+
filegroup(
43+
name = "bundle-outputgroups-es5_min",
44+
srcs = [":bundle"],
45+
output_group = "es5_min",
46+
)
47+
48+
filegroup(
49+
name = "bundle-outputgroups-es5_min_debug",
50+
srcs = [":bundle"],
51+
output_group = "es5_min_debug",
52+
)
53+
54+
jasmine_node_test(
55+
name = "test-outputgroups",
56+
srcs = glob(["*.spec.js"]),
57+
data = glob([
58+
"*_golden.js_",
59+
]) + [
60+
":bundle-outputgroups-es2015",
61+
":bundle-outputgroups-es5",
62+
":bundle-outputgroups-es5_min",
63+
":bundle-outputgroups-es5_min_debug",
64+
],
65+
deps = [
66+
"//internal/e2e:check_lib",
67+
"@npm//jasmine",
68+
"@npm//unidiff",
69+
],
70+
)

internal/rollup/rollup_bundle.bzl

Lines changed: 100 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -408,77 +408,109 @@ def _generate_code_split_entry(ctx, bundles_folder, output):
408408
},
409409
)
410410

411+
# Generate code split bundles if additional entry points have been specified.
412+
# See doc for additional_entry_points for more information.
413+
# Note: "_chunks" is needed on the output folders since ctx.label.name + ".es2015" is already
414+
# a folder that contains the re-rooted es2015 sources
415+
def _rollup_bundle_addition_entry_points(ctx):
416+
rollup_config = write_rollup_config(ctx, output_format = "es", additional_entry_points = ctx.attr.additional_entry_points)
417+
code_split_es2015_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_es2015")
418+
_run_rollup(ctx, _collect_es2015_sources(ctx), rollup_config, code_split_es2015_output_dir)
419+
code_split_es2015_min_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_es2015")
420+
_run_terser(ctx, code_split_es2015_output_dir, code_split_es2015_min_output_dir, None)
421+
code_split_es2015_min_debug_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_debug_es2015")
422+
_run_terser(ctx, code_split_es2015_output_dir, code_split_es2015_min_debug_output_dir, None, debug = True)
423+
424+
code_split_es5_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks")
425+
_run_tsc_on_directory(ctx, code_split_es2015_output_dir, code_split_es5_output_dir)
426+
code_split_es5_min_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min")
427+
_run_terser(ctx, code_split_es5_output_dir, code_split_es5_min_output_dir, None)
428+
code_split_es5_min_debug_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_debug")
429+
_run_terser(ctx, code_split_es5_output_dir, code_split_es5_min_debug_output_dir, None, debug = True)
430+
431+
# Generate the SystemJS boilerplate/entry point files
432+
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_es2015", ctx.outputs.build_es2015)
433+
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_min_es2015", ctx.outputs.build_es2015_min)
434+
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_min_debug_es2015", ctx.outputs.build_es2015_min_debug)
435+
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_es5)
436+
_generate_code_split_entry(ctx, ctx.label.name + "_chunks_min", ctx.outputs.build_es5_min)
437+
_generate_code_split_entry(ctx, ctx.label.name + "_chunks_min_debug", ctx.outputs.build_es5_min_debug)
438+
439+
# There is no UMD/CJS bundle when code-splitting but we still need to satisfy the output
440+
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_umd)
441+
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_cjs)
442+
443+
# There is no source map explorer output when code-splitting but we still need to satisfy the output
444+
ctx.actions.expand_template(
445+
output = ctx.outputs.explore_html,
446+
template = ctx.file._no_explore_html,
447+
substitutions = {},
448+
)
449+
files = [
450+
ctx.outputs.build_es2015,
451+
ctx.outputs.build_es2015_min,
452+
ctx.outputs.build_es2015_min_debug,
453+
ctx.outputs.build_es5,
454+
ctx.outputs.build_es5_min,
455+
ctx.outputs.build_es5_min_debug,
456+
code_split_es2015_output_dir,
457+
code_split_es2015_min_output_dir,
458+
code_split_es2015_min_debug_output_dir,
459+
code_split_es5_output_dir,
460+
code_split_es5_min_output_dir,
461+
code_split_es5_min_debug_output_dir,
462+
]
463+
464+
return [
465+
DefaultInfo(files = depset(files), runfiles = ctx.runfiles(files)),
466+
OutputGroupInfo(
467+
es2015 = depset([ctx.outputs.build_es2015, code_split_es2015_output_dir]),
468+
es2015_min = depset([ctx.outputs.build_es2015_min, code_split_es2015_min_output_dir]),
469+
es2015_min_debug = depset([ctx.outputs.build_es2015_min_debug, code_split_es2015_min_debug_output_dir]),
470+
es5 = depset([ctx.outputs.build_es5, code_split_es5_output_dir]),
471+
es5_min = depset([ctx.outputs.build_es5_min, code_split_es5_min_output_dir]),
472+
es5_min_debug = depset([ctx.outputs.build_es5_min_debug, code_split_es5_min_debug_output_dir]),
473+
),
474+
]
475+
476+
def _rollup_bundle_single_entry(ctx):
477+
# Generate the bundles
478+
rollup_config = write_rollup_config(ctx)
479+
480+
es2015_map = run_rollup(ctx, _collect_es2015_sources(ctx), rollup_config, ctx.outputs.build_es2015)
481+
es2015_min_map = run_terser(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es2015_min, config_name = ctx.label.name + "es2015_min")
482+
es2015_min_debug_map = run_terser(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es2015_min_debug, debug = True, config_name = ctx.label.name + "es2015_min_debug")
483+
_run_tsc(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es5)
484+
es5_min_map = run_terser(ctx, ctx.outputs.build_es5, ctx.outputs.build_es5_min)
485+
es5_min_debug_map = run_terser(ctx, ctx.outputs.build_es5, ctx.outputs.build_es5_min_debug, debug = True)
486+
cjs_rollup_config = write_rollup_config(ctx, filename = "_%s_cjs.rollup.conf.js", output_format = "cjs")
487+
cjs_map = run_rollup(ctx, _collect_es2015_sources(ctx), cjs_rollup_config, ctx.outputs.build_cjs)
488+
umd_rollup_config = write_rollup_config(ctx, filename = "_%s_umd.rollup.conf.js", output_format = "umd")
489+
umd_map = run_rollup(ctx, _collect_es2015_sources(ctx), umd_rollup_config, ctx.outputs.build_umd)
490+
491+
run_sourcemapexplorer(ctx, ctx.outputs.build_es5_min, es5_min_map, ctx.outputs.explore_html)
492+
493+
files = [ctx.outputs.build_es5_min, es5_min_map]
494+
495+
return [
496+
DefaultInfo(files = depset(files), runfiles = ctx.runfiles(files)),
497+
OutputGroupInfo(
498+
cjs = depset([ctx.outputs.build_cjs, cjs_map]),
499+
es2015 = depset([ctx.outputs.build_es2015, es2015_map]),
500+
es2015_min = depset([ctx.outputs.build_es2015_min, es2015_min_map]),
501+
es2015_min_debug = depset([ctx.outputs.build_es2015_min_debug, es2015_min_debug_map]),
502+
es5 = depset([ctx.outputs.build_es5]),
503+
es5_min = depset([ctx.outputs.build_es5_min, es5_min_map]),
504+
es5_min_debug = depset([ctx.outputs.build_es5_min_debug, es5_min_debug_map]),
505+
umd = depset([ctx.outputs.build_umd, umd_map]),
506+
),
507+
]
508+
411509
def _rollup_bundle(ctx):
412510
if ctx.attr.additional_entry_points:
413-
# Generate code split bundles if additional entry points have been specified.
414-
# See doc for additional_entry_points for more information.
415-
# Note: "_chunks" is needed on the output folders since ctx.label.name + ".es2015" is already
416-
# a folder that contains the re-rooted es2015 sources
417-
rollup_config = write_rollup_config(ctx, output_format = "es", additional_entry_points = ctx.attr.additional_entry_points)
418-
code_split_es2015_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_es2015")
419-
_run_rollup(ctx, _collect_es2015_sources(ctx), rollup_config, code_split_es2015_output_dir)
420-
code_split_es2015_min_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_es2015")
421-
_run_terser(ctx, code_split_es2015_output_dir, code_split_es2015_min_output_dir, None)
422-
code_split_es2015_min_debug_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_debug_es2015")
423-
_run_terser(ctx, code_split_es2015_output_dir, code_split_es2015_min_debug_output_dir, None, debug = True)
424-
425-
code_split_es5_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks")
426-
_run_tsc_on_directory(ctx, code_split_es2015_output_dir, code_split_es5_output_dir)
427-
code_split_es5_min_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min")
428-
_run_terser(ctx, code_split_es5_output_dir, code_split_es5_min_output_dir, None)
429-
code_split_es5_min_debug_output_dir = ctx.actions.declare_directory(ctx.label.name + "_chunks_min_debug")
430-
_run_terser(ctx, code_split_es5_output_dir, code_split_es5_min_debug_output_dir, None, debug = True)
431-
432-
# Generate the SystemJS boilerplate/entry point files
433-
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_es2015", ctx.outputs.build_es2015)
434-
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_min_es2015", ctx.outputs.build_es2015_min)
435-
_generate_toplevel_entry(ctx, ctx.label.name + "_chunks_min_debug_es2015", ctx.outputs.build_es2015_min_debug)
436-
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_es5)
437-
_generate_code_split_entry(ctx, ctx.label.name + "_chunks_min", ctx.outputs.build_es5_min)
438-
_generate_code_split_entry(ctx, ctx.label.name + "_chunks_min_debug", ctx.outputs.build_es5_min_debug)
439-
440-
# There is no UMD/CJS bundle when code-splitting but we still need to satisfy the output
441-
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_umd)
442-
_generate_code_split_entry(ctx, ctx.label.name + "_chunks", ctx.outputs.build_cjs)
443-
444-
# There is no source map explorer output when code-splitting but we still need to satisfy the output
445-
ctx.actions.expand_template(
446-
output = ctx.outputs.explore_html,
447-
template = ctx.file._no_explore_html,
448-
substitutions = {},
449-
)
450-
files = [
451-
ctx.outputs.build_es2015,
452-
ctx.outputs.build_es2015_min,
453-
ctx.outputs.build_es2015_min_debug,
454-
ctx.outputs.build_es5,
455-
ctx.outputs.build_es5_min,
456-
ctx.outputs.build_es5_min_debug,
457-
code_split_es2015_output_dir,
458-
code_split_es2015_min_output_dir,
459-
code_split_es2015_min_debug_output_dir,
460-
code_split_es5_output_dir,
461-
code_split_es5_min_output_dir,
462-
code_split_es5_min_debug_output_dir,
463-
]
464-
511+
return _rollup_bundle_addition_entry_points(ctx)
465512
else:
466-
# Generate the bundles
467-
rollup_config = write_rollup_config(ctx)
468-
run_rollup(ctx, _collect_es2015_sources(ctx), rollup_config, ctx.outputs.build_es2015)
469-
run_terser(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es2015_min, config_name = ctx.label.name + "es2015_min")
470-
run_terser(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es2015_min_debug, debug = True, config_name = ctx.label.name + "es2015_min_debug")
471-
_run_tsc(ctx, ctx.outputs.build_es2015, ctx.outputs.build_es5)
472-
source_map = run_terser(ctx, ctx.outputs.build_es5, ctx.outputs.build_es5_min)
473-
run_terser(ctx, ctx.outputs.build_es5, ctx.outputs.build_es5_min_debug, debug = True)
474-
cjs_rollup_config = write_rollup_config(ctx, filename = "_%s_cjs.rollup.conf.js", output_format = "cjs")
475-
run_rollup(ctx, _collect_es2015_sources(ctx), cjs_rollup_config, ctx.outputs.build_cjs)
476-
umd_rollup_config = write_rollup_config(ctx, filename = "_%s_umd.rollup.conf.js", output_format = "umd")
477-
run_rollup(ctx, _collect_es2015_sources(ctx), umd_rollup_config, ctx.outputs.build_umd)
478-
run_sourcemapexplorer(ctx, ctx.outputs.build_es5_min, source_map, ctx.outputs.explore_html)
479-
files = [ctx.outputs.build_es5_min, source_map]
480-
481-
return DefaultInfo(files = depset(files), runfiles = ctx.runfiles(files))
513+
return _rollup_bundle_single_entry(ctx)
482514

483515
# Expose our list of aspects so derivative rules can override the deps attribute and
484516
# add their own additional aspects.

0 commit comments

Comments
 (0)