fix(bazel): set rollup output.name and amd.id (#23274)
These are based on the name of the package as declared in the module_name attribute on ng_module Fixes #23238 PR Close #23274
This commit is contained in:
parent
1fac5f4eb1
commit
3e8eef6015
|
@ -18,7 +18,6 @@ load("@build_bazel_rules_nodejs//:internal/npm_package/npm_package.bzl",
|
||||||
load("@build_bazel_rules_nodejs//:internal/node.bzl", "sources_aspect")
|
load("@build_bazel_rules_nodejs//:internal/node.bzl", "sources_aspect")
|
||||||
load("//packages/bazel/src:esm5.bzl", "esm5_outputs_aspect", "flatten_esm5", "esm5_root_dir")
|
load("//packages/bazel/src:esm5.bzl", "esm5_outputs_aspect", "flatten_esm5", "esm5_root_dir")
|
||||||
|
|
||||||
# TODO(alexeagle): this list is incomplete, add more as material ramps up
|
|
||||||
WELL_KNOWN_GLOBALS = {
|
WELL_KNOWN_GLOBALS = {
|
||||||
"@angular/upgrade": "ng.upgrade",
|
"@angular/upgrade": "ng.upgrade",
|
||||||
"@angular/upgrade/static": "ng.upgrade.static",
|
"@angular/upgrade/static": "ng.upgrade.static",
|
||||||
|
@ -55,8 +54,29 @@ WELL_KNOWN_GLOBALS = {
|
||||||
"rxjs/operators": "rxjs.operators",
|
"rxjs/operators": "rxjs.operators",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Convert from some-dash-case to someCamelCase
|
||||||
|
def _convert_dash_case_to_camel_case(s):
|
||||||
|
parts = s.split("-")
|
||||||
|
# First letter in the result is always unchanged
|
||||||
|
return s[0] + "".join([p.title() for p in parts])[1:]
|
||||||
|
|
||||||
def _rollup(ctx, rollup_config, entry_point, inputs, js_output, format = "es"):
|
# Convert from a package name on npm to an identifier that's a legal global symbol
|
||||||
|
# @angular/core -> ng.core
|
||||||
|
# @angular/platform-browser-dynamic/testing -> ng.platformBrowserDynamic.testing
|
||||||
|
def _global_name(package_name):
|
||||||
|
# strip npm scoped package qualifier
|
||||||
|
start = 1 if package_name.startswith("@") else 0
|
||||||
|
parts = package_name[start:].split("/")
|
||||||
|
result_parts = []
|
||||||
|
for p in parts:
|
||||||
|
# Special case for angular's short name
|
||||||
|
if p == "angular":
|
||||||
|
result_parts.append("ng")
|
||||||
|
else:
|
||||||
|
result_parts.append(_convert_dash_case_to_camel_case(p))
|
||||||
|
return ".".join(result_parts)
|
||||||
|
|
||||||
|
def _rollup(ctx, rollup_config, entry_point, inputs, js_output, format = "es", package_name = ""):
|
||||||
map_output = ctx.actions.declare_file(js_output.basename + ".map", sibling = js_output)
|
map_output = ctx.actions.declare_file(js_output.basename + ".map", sibling = js_output)
|
||||||
|
|
||||||
args = ctx.actions.args()
|
args = ctx.actions.args()
|
||||||
|
@ -65,7 +85,9 @@ def _rollup(ctx, rollup_config, entry_point, inputs, js_output, format = "es"):
|
||||||
args.add(["--input", entry_point])
|
args.add(["--input", entry_point])
|
||||||
args.add(["--output.file", js_output.path])
|
args.add(["--output.file", js_output.path])
|
||||||
args.add(["--output.format", format])
|
args.add(["--output.format", format])
|
||||||
args.add(["--name", ctx.label.name])
|
if package_name:
|
||||||
|
args.add(["--output.name", _global_name(package_name)])
|
||||||
|
args.add(["--amd.id", package_name])
|
||||||
|
|
||||||
# Note: if the input has external source maps then we need to also install and use
|
# Note: if the input has external source maps then we need to also install and use
|
||||||
# `rollup-plugin-sourcemaps`, which will require us to use rollup.config.js file instead
|
# `rollup-plugin-sourcemaps`, which will require us to use rollup.config.js file instead
|
||||||
|
@ -148,12 +170,15 @@ def _ng_package_impl(ctx):
|
||||||
# - in this package or a subpackage
|
# - in this package or a subpackage
|
||||||
# - those that have a module_name attribute (they produce flat module metadata)
|
# - those that have a module_name attribute (they produce flat module metadata)
|
||||||
flat_module_metadata = []
|
flat_module_metadata = []
|
||||||
|
# Name given in the package.json name field, eg. @angular/core/testing
|
||||||
|
package_name = ""
|
||||||
deps_in_package = [d for d in ctx.attr.deps if d.label.package.startswith(ctx.label.package)]
|
deps_in_package = [d for d in ctx.attr.deps if d.label.package.startswith(ctx.label.package)]
|
||||||
for dep in deps_in_package:
|
for dep in deps_in_package:
|
||||||
# Intentionally evaluates to empty string for the main entry point
|
# Intentionally evaluates to empty string for the main entry point
|
||||||
entry_point = dep.label.package[len(ctx.label.package) + 1:]
|
entry_point = dep.label.package[len(ctx.label.package) + 1:]
|
||||||
if hasattr(dep, "angular") and hasattr(dep.angular, "flat_module_metadata"):
|
if hasattr(dep, "angular") and hasattr(dep.angular, "flat_module_metadata"):
|
||||||
flat_module_metadata.append(dep.angular.flat_module_metadata)
|
flat_module_metadata.append(dep.angular.flat_module_metadata)
|
||||||
|
package_name = dep.angular.flat_module_metadata.module_name
|
||||||
flat_module_out_file = dep.angular.flat_module_metadata.flat_module_out_file + ".js"
|
flat_module_out_file = dep.angular.flat_module_metadata.flat_module_out_file + ".js"
|
||||||
else:
|
else:
|
||||||
# fallback to a reasonable default
|
# fallback to a reasonable default
|
||||||
|
@ -194,7 +219,7 @@ def _ng_package_impl(ctx):
|
||||||
fesm2015.append(_rollup(ctx, config, es2015_entry_point, esm_2015_files, fesm2015_output))
|
fesm2015.append(_rollup(ctx, config, es2015_entry_point, esm_2015_files, fesm2015_output))
|
||||||
fesm5.append(_rollup(ctx, config, es5_entry_point, esm5_sources, fesm5_output))
|
fesm5.append(_rollup(ctx, config, es5_entry_point, esm5_sources, fesm5_output))
|
||||||
|
|
||||||
bundles.append(_rollup(ctx, config, es5_entry_point, esm5_sources, umd_output, format = "umd"))
|
bundles.append(_rollup(ctx, config, es5_entry_point, esm5_sources, umd_output, format = "umd", package_name = package_name))
|
||||||
uglify_sourcemap = run_uglify(ctx, umd_output, min_output,
|
uglify_sourcemap = run_uglify(ctx, umd_output, min_output,
|
||||||
config_name = entry_point.replace("/", "_"))
|
config_name = entry_point.replace("/", "_"))
|
||||||
bundles.append(struct(js = min_output, map = uglify_sourcemap))
|
bundles.append(struct(js = min_output, map = uglify_sourcemap))
|
||||||
|
|
|
@ -180,6 +180,10 @@ describe('@angular/core ng_package', () => {
|
||||||
|
|
||||||
it('should have tslib helpers',
|
it('should have tslib helpers',
|
||||||
() => { expect(shx.cat('bundles/core.umd.js')).not.toContain('undefined.__extends'); });
|
() => { expect(shx.cat('bundles/core.umd.js')).not.toContain('undefined.__extends'); });
|
||||||
|
it('should have an AMD name',
|
||||||
|
() => { expect(shx.cat('bundles/core.umd.js')).toContain('define(\'@angular/core\''); });
|
||||||
|
it('should define ng global symbols',
|
||||||
|
() => { expect(shx.cat('bundles/core.umd.js')).toContain('global.ng.core = {}'); });
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -272,6 +276,16 @@ describe('@angular/core ng_package', () => {
|
||||||
it('should have a source map next to the minified umd file', () => {
|
it('should have a source map next to the minified umd file', () => {
|
||||||
expect(shx.ls('bundles/core-testing.umd.min.js.map').length).toBe(1, 'File not found');
|
expect(shx.ls('bundles/core-testing.umd.min.js.map').length).toBe(1, 'File not found');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should have an AMD name', () => {
|
||||||
|
expect(shx.cat('bundles/core-testing.umd.js'))
|
||||||
|
.toContain('define(\'@angular/core/testing\'');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should define ng global symbols', () => {
|
||||||
|
expect(shx.cat('bundles/core-testing.umd.js')).toContain('global.ng.core.testing = {}');
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in New Issue