105 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			105 lines
		
	
	
		
			8.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | # Updating Angular
 | ||
|  | 
 | ||
|  | This guide contains information related to updating to Angular version 12. | ||
|  | 
 | ||
|  | ## Updating CLI applications
 | ||
|  | 
 | ||
|  | For step-by-step instructions on how to update to the latest Angular release and leverage our automated migration tools to do so, use the interactive update guide at [update.angular.io](https://update.angular.io). | ||
|  | 
 | ||
|  | 
 | ||
|  | ## Building applications with Ivy
 | ||
|  | 
 | ||
|  | For libraries, View Engine is deprecated and will be removed in version 13. | ||
|  | New libraries created with version 12 or later default to Ivy. | ||
|  | For more information about distributing libraries with View Engine and Ivy, see the [Building libraries with Ivy](guide/creating-libraries#ivy-libraries) section of [Creating libraries](guide/creating-libraries). | ||
|  | 
 | ||
|  | ## Changes and deprecations in version 12
 | ||
|  | 
 | ||
|  | <div class="alert is-helpful"> | ||
|  | 
 | ||
|  |    For information about Angular's deprecation and removal practices, see [Angular Release Practices](guide/releases#deprecation-practices "Angular Release Practices: Deprecation practices"). | ||
|  | 
 | ||
|  | </div> | ||
|  | 
 | ||
|  | * Applications can no longer build with View Engine by setting `enableIvy: false`. | ||
|  |   Support for building libraries with View Engine, for backwards compatibility, is deprecated and will be removed in Angular version 13. | ||
|  |   New libraries created with Angular version 12 will default to building and distributing with Ivy. | ||
|  |   For more information, see [Creating Libraries](guide/creating-libraries). | ||
|  | * The Ivy-based IDE [language service](guide/language-service) is now on by default. | ||
|  |   See [PR #1279](https://github.com/angular/vscode-ng-language-service/pull/1279). | ||
|  | * Angular's View Engine-based algorithm for generating i18n message IDs is deprecated. | ||
|  |   Angular version 12 adds a new flag to `localize-extract` called `--migrateMapFile` which  generates a JSON file that can be used to map legacy message IDs to canonical ones. | ||
|  |   There is also a new script called `localize-migrate` that can use the mapping file which `localize-extract` generates and migrate all of the IDs in the files that are passed in. | ||
|  |   For better stability, if you are using Angular's `i18n`, run this migration to move to the new message ID generation algorithm. | ||
|  |   If you don't run this migration, all your generated message IDs will change when Angular removes the View Engine compiler. | ||
|  |   See [PR #41026](https://github.com/angular/angular/pull/41026). | ||
|  | * There is now a new build option named `inlineStyleLanguage` for defining the style sheet language in inline component styles. | ||
|  |   Currently supported language options are CSS (default), Sass, SCSS, and LESS. | ||
|  |   The default of CSS enables existing projects to continue to function as expected. | ||
|  |   See [PR #20514](https://github.com/angular/angular-cli/pull/20514). | ||
|  | * For new applications, strict mode is now the default in the CLI. | ||
|  |   See [PR #20029](https://github.com/angular/angular-cli/pull/20029). | ||
|  | * Add `emitEvent` option for `AbstractControl` class methods. | ||
|  |   See [PR #31031](https://github.com/angular/angular/pull/31031). | ||
|  | * Support `APP_INITIALIZER` to work with observables. | ||
|  |   See [PR #31031](https://github.com/angular/angular/pull/31031). | ||
|  | * `HttpClient` supports specifying request metadata. | ||
|  |   See [PR #25751](https://github.com/angular/angular/pull/25751). | ||
|  | 
 | ||
|  | 
 | ||
|  | {@a breaking-changes} | ||
|  | ### Breaking changes in Angular version 12
 | ||
|  | 
 | ||
|  | * Add support for TypeScript 4.2. | ||
|  |   TypeScript <4.2.3 is no longer supported. | ||
|  |   The supported range of TypeScript versions is 4.2.3 to 4.2.x. | ||
|  |   See [PR #41158](https://github.com/angular/angular/pull/41158). | ||
|  | * Angular CDK and Angular Material internally now use the new [Sass module system](https://sass-lang.com/blog/the-module-system-is-launched), which is actively maintained by the Sass team at Google. | ||
|  |   Consequently, applications can no longer consume Angular CDK/Material's Sass with the [`node-sass` npm package](https://www.npmjs.com/package/node-sass). | ||
|  |   `node-sass` is unmaintained and does not support newer Sass features. Instead, applications must use the [`sass` npm package](https://www.npmjs.com/package/sass), or the [`sass-embedded` npm package](https://www.npmjs.com/package/sass-embedded) for the `sass-embedded` beta. | ||
|  | * The Angular tooling now uses Webpack 5 to build applications. Webpack 4 usage and support has been removed. | ||
|  |   You don't need to make any project level configuration changes to use the upgraded Webpack version when using the official Angular builders. | ||
|  |   Custom builders based on this package that use the experimental programmatic APIs may need to be updated to become compatible with Webpack 5. | ||
|  |   See [PR #20466](https://github.com/angular/angular-cli/pull/20466). | ||
|  | * Webpack 5 generates similar but differently named files for lazy-loaded JavaScript files in development configurations when the `namedChunks` option is enabled. | ||
|  |   For the majority of users this change should have no effect on the application or build process. | ||
|  |   Production builds should also not be affected as the `namedChunks` option is disabled by default in production configurations. | ||
|  |   However, if a project's post-build process makes assumptions as to the file names, then adjustments may need to be made to account for the new naming paradigm. | ||
|  |   Such post-build processes could include custom file transformations after the build, integration into service-side frameworks, or deployment procedures. | ||
|  |   An example of a development file name change is `lazy-lazy-module.js` becoming `src_app_lazy_lazy_module_ts.js`. | ||
|  |   See [PR #20466](https://github.com/angular/angular-cli/pull/20466). | ||
|  | * Webpack 5 now includes web worker support. | ||
|  |   However, the structure of the URL within the worker constructor must be in a specific format that differs from the current requirement. | ||
|  |   To update web worker usage, where `./app.worker` is the actual worker name, change `new Worker('./app.worker', ...)` to `new Worker(new URL('./app.worker', import.meta.url), ...)`. | ||
|  |   See [PR #20466](https://github.com/angular/angular-cli/pull/20466). | ||
|  | * Critical CSS inlining is now enabled by default. | ||
|  |   To turn this off, set `inlineCritical` to false. | ||
|  |   See [PR #20096](https://github.com/angular/angular-cli/pull/20096) and the [Style preprocessor options](guide/workspace-config#optimization-configuration) section of [Angular workspace configuration](guide/workspace-config). | ||
|  | * `ng build` now produces production bundle by default. | ||
|  |   See [PR #20128](https://github.com/angular/angular-cli/pull/20128). | ||
|  | * Previously, the Forms module ignored `min` and `max` attributes defined on the `<input type="number">`. | ||
|  |   Now these attributes trigger `min` and `max` validation logic in cases where `formControl`, `formControlName`, or `ngModel` directives are also present on a given input. | ||
|  |   See [PR #39063](https://github.com/angular/angular/pull/39063). | ||
|  | 
 | ||
|  | 
 | ||
|  | {@a deprecations} | ||
|  | ### New deprecations
 | ||
|  | 
 | ||
|  | * Support for Internet Explorer 11 is deprecated. | ||
|  |   See [Deprecated APIs and features](guide/deprecations) and [Microsoft 365 apps say farewell to Internet Explorer 11 and Windows 10 sunsets Microsoft Edge Legacy](https://techcommunity.microsoft.com/t5/microsoft-365-blog/microsoft-365-apps-say-farewell-to-internet-explorer-11-and/ba-p/1591666). | ||
|  | * Sass imports from `@angular/material/theming` are deprecated. There is a new Angular Material Sass API for `@use`. | ||
|  |   Run the migration script `ng g @angular/material:themingApi` to switch all your Sass imports for Angular CDK and Angular Material to the new API and `@use`. | ||
|  | * Support for publishing libraries with View Engine has been deprecated: | ||
|  |   - You can now compile libraries in [_partial_ compilation mode](guide/angular-compiler-options#compilationmode) to generate Ivy compatible output that will be _linked_ when an application using that library is bundled. | ||
|  |   - New libraries you create with the Angular CLI default to partial compilation mode, and do not support View Engine. You can still build a library with View Engine. See [Creating libraries](guide/creating-libraries) for more information. | ||
|  |   - Libraries compiled in partial compilation mode will not contain legacy `i18n` message IDs. | ||
|  |     If the library was previously compiled by View Engine, and contained legacy `i18n` message IDs, then applications may have translation files that you'll need to migrate to the new message ID format. For more information, see [Migrating legacy localization IDs](guide/migration-legacy-message-id). | ||
|  |   - For context, see [Issue #38366](https://github.com/angular/angular/issues/38366). | ||
|  | 
 | ||
|  | <div class="alert is-helpful"> | ||
|  | 
 | ||
|  | Since version 9, Angular Ivy is the default rendering engine. | ||
|  | For more information about Ivy, see [Angular Ivy](guide/ivy). | ||
|  | 
 | ||
|  | </div> |