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
		
	
			
		
			
				
	
	
		
			18 lines
		
	
	
		
			974 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			18 lines
		
	
	
		
			974 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| import "rxjs";
 | |
| 
 | |
| import "rxjs/operators";
 | |
| 
 | |
| const __globalThis = "undefined" !== typeof globalThis && globalThis;
 | |
| 
 | |
| const __window = "undefined" !== typeof window && window;
 | |
| 
 | |
| const __self = "undefined" !== typeof self && "undefined" !== typeof WorkerGlobalScope && self instanceof WorkerGlobalScope && self;
 | |
| 
 | |
| const __global = "undefined" !== typeof global && global;
 | |
| 
 | |
| const _global = __globalThis || __global || __window || __self;
 | |
| 
 | |
| if ("undefined" !== typeof ngDevMode && ngDevMode) _global.$localize = _global.$localize || function() {
 | |
|     throw new Error("It looks like your application or one of its dependencies is using i18n.\n" + "Angular 9 introduced a global `$localize()` function that needs to be loaded.\n" + "Please run `ng add @angular/localize` from the Angular CLI.\n" + "(For non-CLI projects, add `import '@angular/localize/init';` to your `polyfills.ts` file.\n" + "For server-side rendering applications add the import to your `main.server.ts` file.)");
 | |
| };
 |