angular-docs-cn/integration/side-effects
JoostK 3c6edcdf93 fix(core): do not error when `ngDevMode` is undeclared (#39415)
In production mode, the `ngDevMode` global may not have been declared.
This is typically not a problem, as optimizers should have removed all
usages of the `ngDevMode` variables. This does however require the
bundler/optimizer to have been configured in a certain way, as to allow
for `ngDevMode` guarded code to be removed.

As an example, Terser can be configured to remove the `ngDevMode`
guarded code using the following configuration:

```js
const terserOptions = {
  // ...
  compress: {
    // ...
    global_defs: require('@angular/compiler-cli').GLOBAL_DEFS_FOR_TERSER,
  }
}
```

(Taken from https://github.com/angular/angular/issues/31595#issuecomment-519129090)

If this is not done, however, the bundle should still work (albeit with
larger code size due to missed tree-shaking opportunities). This commit
adds a check for whether `ngDevMode` has been declared, as it is a
top-level statement that executes before `ngDevMode` has been initialized.

Fixes #31595

PR Close #39415
2020-10-27 10:45:18 -07:00
..
snapshots fix(core): do not error when `ngDevMode` is undeclared (#39415) 2020-10-27 10:45:18 -07:00
.gitignore test: add integration test for side effects (#29329) 2019-05-16 12:08:49 -07:00
README.md test: add integration test for side effects (#29329) 2019-05-16 12:08:49 -07:00
package.json test: add integration test for side effects (#29329) 2019-05-16 12:08:49 -07:00
side-effects.json build: update side-effects integration test to not expect esm5 output (#36944) 2020-05-06 13:54:27 -07:00
yarn.lock feat: typescript 3.6 support (#32946) 2019-10-18 13:15:16 -04:00

README.md

This test checks if the side effects for loading Angular packages have changed using https://github.com/filipesilva/check-side-effects.

Running yarn test will check all ES modules listed in side-effects.json.

Running yarn update will update any changed side effects.

To add a new ES module to this test, add a new entry in side-effects.json.

Usually the ESM and FESM should have the same output, but retained objects that were renamed during the flattening step will leave behind a different name.