8e5567d964
Previously, when `ngcc` was called with `compileAllFormats === false` (i.e. how `@angular/cli` calls it), it would not attempt to process more properties, once the first was successfully processed. However, it _would_ continue looping over them and perform some unnecessary operations, such as: - Determining the format each property maps to (which can be an expensive operation for some properties mapping to either UMD or CommonJS). - Checking whether each property has been processed (which involves checking whether any property has been processed with a different version of `ngcc` each time). - Potentially marking properties as processed (which involves a file-write operation). This commit avoids the unnecessary operations by entirely skipping subsequent properties, once the first one has been successfully processed. While this theoretically improves performance, it is not expected to have any noticeable impact in practice, since the list of `propertiesToConsider` is typically small and the most expensive operation (marking a property as processed) has low likelihood of happening (plus these operations are a tiny fraction of `ngcc`'s work). PR Close #32003
Angular Compatibility Compiler (ngcc)
This compiler will convert node_modules
compiled with ngc
, into node_modules
which
appear to have been compiled with ngtsc
.
This conversion will allow such "legacy" packages to be used by the Ivy rendering engine.
Building
The project is built using Bazel:
yarn bazel build //packages/compiler-cli/ngcc
Unit Testing
The unit tests are built and run using Bazel:
yarn bazel test //packages/compiler-cli/ngcc/test
Integration Testing
There are tests that check the behavior of the overall executable:
yarn bazel test //packages/compiler-cli/ngcc/test:integration