fix(bazel): disable treeshaking when generating FESM and UMD bundles (#32069)
There has been a regression where enabling rollup treeshaking causes errors during runtime because it will drop const access which will always evaluate to true or false. However, such `const` in `@angular/core` cannot be dropped because their value is changed when NGCC is run on `@angular/core` VE ``` const SWITCH_IVY_ENABLED__POST_R3__ = true; const SWITCH_IVY_ENABLED__PRE_R3__ = false; const ivyEnabled = SWITCH_IVY_ENABLED__PRE_R3__; ``` Ivy (After NGCC) ``` const SWITCH_IVY_ENABLED__POST_R3__ = true; const SWITCH_IVY_ENABLED__PRE_R3__ = false; const ivyEnabled = SWITCH_IVY_ENABLED__POST_R3__; ``` FESM2015 ``` load(path) { /** @type {?} */ const legacyOfflineMode = this._compiler instanceof Compiler; return legacyOfflineMode ? this.loadFactory(path) : this.loadAndCompile(path); } ``` ESM2015 ``` load(path) { /** @type {?} */ const legacyOfflineMode = !ivyEnabled && this._compiler instanceof Compiler; return legacyOfflineMode ? this.loadFactory(path) : this.loadAndCompile(path); } ``` From the above we can see that `ivyEnabled ` is being treeshaken away when generating the FESM bundle which is causing runtime errors such as `Cannot find module './lazy/lazy.module.ngfactory'` since in Ivy we will always load the factories. PR Close #32069
This commit is contained in:
parent
0ddf0c4895
commit
4f37487b1c
|
@ -112,11 +112,13 @@ def _rollup(ctx, bundle_name, rollup_config, entry_point, inputs, js_output, for
|
|||
args.add("--amd.id", package_name)
|
||||
|
||||
# After updating to build_bazel_rules_nodejs 0.27.0+, rollup has been updated to v1.3.1
|
||||
# which tree shakes @__PURE__ annotations by default. We turn this feature off
|
||||
# for ng_package as Angular bundles contain these annotations and there are
|
||||
# test failures if they are removed. See comments in
|
||||
# https://github.com/angular/angular/pull/29210 for more information.
|
||||
args.add("--no-treeshake.annotations")
|
||||
# which tree shakes @__PURE__ annotations and const variables which are later ammended by NGCC.
|
||||
# We turn this feature off for ng_package as Angular bundles contain these and there are
|
||||
# test failures if they are removed.
|
||||
# See comments in:
|
||||
# https://github.com/angular/angular/pull/29210
|
||||
# https://github.com/angular/angular/pull/32069
|
||||
args.add("--no-treeshake")
|
||||
|
||||
# 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
|
||||
|
|
|
@ -133,6 +133,10 @@ describe('@angular/core ng_package', () => {
|
|||
} else {
|
||||
it('should have decorators',
|
||||
() => { expect(shx.cat('fesm5/core.js')).toContain('__decorate'); });
|
||||
|
||||
// See: https://github.com/angular/angular/pull/32069
|
||||
it('should retain access to const',
|
||||
() => { expect(shx.cat('fesm5/core.js')).toContain('!ivyEnabled'); });
|
||||
}
|
||||
|
||||
it('should load tslib from external bundle', () => {
|
||||
|
|
Loading…
Reference in New Issue