An internal compiler option named `supportJitMode` is now available for use by the Angular CLI. This option currently controls the emit of NgModule selector scope information. This emitted information is only needed in AOT mode when an application also uses JIT. However, AOT mode combined with JIT mode is not currently supported nor will work in the Angular CLI. With the Angular CLI, JIT mode is only supported if the entire application is built in JIT mode. Without this option, the CLI needs to manually perform a code transform to remove the information and also replicate TypeScript's import eliding. This is can be a complicated operation and must be continually kept up to date with any changes to both the Angular compiler and TypeScript. The introduction of this new option alleviates these concerns while also removing several build time actions that would otherwise need to be performed on every application build. PR Close #51007 |
||
|---|---|---|
| .. | ||
| common | ||
| component | ||
| directive | ||
| ng_module | ||
| src | ||
| test | ||
| BUILD.bazel | ||
| index.ts | ||
| README.md | ||
What is the 'annotations' package?
This package implements compilation of Angular-annotated classes - those with @Component, @NgModule, etc. decorators. (Note that the compiler uses 'decorator' and 'annotation' interchangeably, despite them having slightly different semantics).
The 'transform' package of the compiler provides an abstraction for a DecoratorHandler, which defines how to compile a class decorated with a particular Angular decorator. This package implements a DecoratorHandler for each Angular type. The methods of these DecoratorHandlers then allow the rest of the compiler to process each decorated class through the phases of compilation.
Anatomy of DecoratorHandlers
Each handler implemented here performs some similar operations:
- It uses the
PartialEvaluatorto resolve expressions within the decorator metadata or other decorated fields that need to be understood statically. - It extracts information from constructors of decorated classes which is required to generate dependency injection instructions.
- It reports errors when developers have misused or misconfigured the decorators.
- It populates registries that describe decorated classes to the rest of the compiler.
- It uses those same registries to understand decorated classes within the context of the compilation (for example, to understand which dependencies are used in a given template).
- It creates
SemanticSymbols which allow for accurate incremental compilation when reacting to input changes. - It builds metadata objects for
@angular/compilerwhich describe the decorated classes, which can then perform the actual code generation.
Since there is significant overlap between DecoratorHandler implementations, much of this functionality is implemented in a shared 'common' sub-package.