51 Commits

Author SHA1 Message Date
Alan Agius
eb30a92e8a feat(@angular-devkit/build-angular): enable inlining of critical CSS optimizations
This is another feature that we mentioned in the Eliminate Render Blocking Requests RFC (#18730)

Inlining of critical CSS is turned off by default. To opt-in this feature set `inlineCritical` to `true`.

Example:
```json
"configurations": {
  "production": {
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ],
    "optimization": {
      "styles": {
        "minify": true,
        "inlineCritical": true,
       }
    },
```

To learn more about critical CSS see;
https://web.dev/defer-non-critical-css
https://web.dev/extract-critical-css/

In a future version of the Angular CLI `inlineCritical` will be enabled by default.

Closes: #17966
Closes: #11395
Closes: #19445
2020-12-04 15:41:29 -05:00
Alan Agius
9c57e45d4e docs: improve description for optimization, configuration and target options.
Closes #16572
Closes #17978
Closes https://github.com/angular/angular/issues/39780
2020-11-25 09:09:00 +00:00
Charles Lyding
94add3082b fix(@angular-devkit/build-angular): validate extracted i18n messages for duplicates
This change will analyze the extract i18n messages for duplicates and issue warnings for each case.  This provides the same default behavior as the standalone message extractor contained within `@angular/localize`.  Configurability of the behavior of a detected duplicate (ignore, warn, error) will be added in a future feature.
2020-11-02 13:36:49 -06:00
Charles Lyding
54aa8911ef refactor(@angular-devkit/build-angular): separate extract format normalization
This separates the option normalization for the i18n format to a separate function to reduce the size of the main builder function.
2020-11-02 13:36:49 -06:00
Charles Lyding
bbbda81f9e fix(@angular-devkit/build-angular): control legacy ID i18n extraction via TypeScript configuration
This change allows the usage of the legacy i18n message identifier format during extraction to be controlled via the `angularCompilerOptions` option `enableI18nLegacyMessageIdFormat` within the application's TypeScript configuration.
2020-11-02 13:36:49 -06:00
Charles Lyding
f6d9028f8b fix(@angular-devkit/build-angular): skip application emit during i18n extraction
The application output files are not needed during an extraction.  Previously the files were emitted to a memory file system and discarded.  This change removes the processing overhead of emitting the files.  It also provides Webpack 5 support due to the internal memory file system no longer being exported.
2020-10-26 13:32:46 -04:00
Charles Lyding
97ba359487 refactor(@angular-devkit/build-angular): remove unneeded 10.1 localize checks
Now that 11.0 is the minimum supported version, the 10.1 support checks for the `@angular/localize` package can be removed.
2020-10-07 14:56:52 -04:00
Alan Agius
dcad2ee0d3 fix(@angular-devkit/build-angular): don't process stylesheets in extraction builder
When building an application for i18n extraction we are currently redundantly processing components stylesheets. With this change we replace the components stylesheets with an empty string which helps reduce the i18n build time.
2020-09-30 19:34:08 +02:00
Alan Agius
8d0922eb7d fix(@angular-devkit/build-angular): resolve i18n outFile from workspaceRoot 2020-09-28 21:24:10 +02:00
Alan Agius
bda8bc8b70 test(@angular-devkit/build-angular): fix unit test setup to be able to run new Ivy extraction 2020-09-28 21:24:10 +02:00
Alan Agius
e0244d05de feat(@angular-devkit/build-angular): enable Ivy extraction by default for Ivy applications 2020-09-28 21:24:10 +02:00
Alan Agius
1ec4ea6659 refactor(@angular-devkit/build-angular): use architect build error instead of logger.error 2020-09-28 15:58:26 +02:00
Alan Agius
1c4d358b38 fix(@angular-devkit/build-angular): implement relative method in extractor FS
This will be needed when the changes in angular/angular#39006 is merged.
2020-09-28 13:58:31 +02:00
Alan Agius
64f340d93f feat(@angular-devkit/build-angular): extract i18n messages from libraries
Closes #18871
2020-09-25 17:59:21 +02:00
Alan Agius
8d770ed0db test: remove test which is no longer relevent
We removed webpack specific build logs from the CLI, therefore this test is no longer relevant.
2020-09-22 10:29:53 -05:00
Alan Agius
d3ad09508f refactor(@angular-devkit/architect): remove deprecated TestLogger
BREAKING CHANGE:

Deprecated `TestLogger` has been removed. Use `logging` API from `'@angular-devkit/core'` instead.

**Note:** this change doesn't effect application developers.
2020-09-22 10:29:53 -05:00
Alan Agius
0d10de5cbb refactor(@angular-devkit/build-angular): re-structure folder structure and move code
Previous
```
packages/angular_devkit/build_angular
├── plugins
│   └── webpack
└── src
    ├── angular-cli-files
    │   ├── models
    │   │   └── webpack-configs
    │   ├── plugins
    │   └── utilities
    │       ├── index-file
    │       └── service-worker
    ├── app-shell
    ├── browser
    │   └── specs
    ├── dev-server
    ├── extract-i18n
    ├── karma
    ├── ng-packagr
    ├── protractor
    ├── server
    ├── tslint
    ├── utils
    └── webpack
        └── models
```

Now
```
packages/angular_devkit/build_angular
├── plugins
└── src
    ├── app-shell
    ├── browser
    │   └── specs
    ├── dev-server
    ├── extract-i18n
    ├── karma
    ├── ng-packagr
    ├── protractor
    ├── server
    ├── tslint
    ├── utils
    │   └── index-file
    └── webpack
        ├── configs
        ├── plugins
        └── utils
```
2020-09-14 16:40:39 -04:00
Alan Agius
14d70d15b9 refactor(@angular-devkit/build-angular): add missing formatOptions which is non optional in v11.0.0-next.1
Related to https://github.com/angular/angular/pull/38787
2020-09-11 14:31:07 -04:00
Alan Agius
1ebd7e610d refactor(@angular-devkit/build-angular): use common logging function for webpack stats
With this change we align all builders to have the same output structure.
2020-09-10 16:21:28 +02:00
Charles Lyding
9a1871d58a fix(@angular-devkit/build-angular): correct Windows paths in ivy i18n extract
POSIX path handling was errantly being used to resolve paths which does not handle Windows drive letters.
2020-08-31 11:58:13 +01:00
Charles Lyding
71360878d9 fix(@angular-devkit/build-angular): ensure ivy extraction file names match sourcemaps
Not doing so results in a circular sourcemap warning when attempting extraction.
2020-08-28 08:55:36 +01:00
Charles Lyding
802d5ade78 feat(@angular-devkit/build-angular): allow transformation of i18n extraction builder configuration
This change allows the underlying webpack configuration of the i18n extraction builder to be modified when programmatically using the builder.
Programmatic usage of the `@angular-devkit/build-angular` builders is currently considered experimental.

Closes #16679
2020-08-26 10:54:24 -04:00
Charles Lyding
a5293fe747 feat(@angular-devkit/build-angular): support i18n message extraction with Ivy
This change adds support for extracting i18n translation messages with an Ivy enabled application. This is accomplished by using the new extraction capabilities present in the `@angular/localize` package and will require version 10.1 or later of the package.  Since this change uses an new extraction method, it currently must be enabled during extraction by using the `--ivy` flag. The flag is a precaution to prevent unintentional breakage for existing applications but will become the default behavior for all Ivy enabled applications in a future release.

Closes #18275
2020-08-18 16:49:45 +02:00
Alan Agius
155707a1ba fix(@angular-devkit/build-angular): don't log blank warnings in console
Closes #18524
2020-08-14 14:41:18 +02:00
Filipe Silva
ef7a07050a test(@angular-devkit/build-angular): build and test with Bazel 2020-04-30 15:12:46 -07:00
Charles Lyding
c5156977f2 fix(@angular-devkit/build-angular): provide explicit return type for extract-i18n builder
Fixes: #16934
2020-02-12 12:01:32 -08:00
Smartin
c73e28e91c refactor(@angular-devkit/build-angular): export executeExtractI18nBuilder
export executeExtractI18nBuilder for use in custom builders and to be consistent with browser- and dev-server-builder.

no breaking changes, no issue
2019-12-09 13:42:08 -08:00
Alan Agius
07801363a6 fix(@angular-devkit/build-angular): add pattern validations for browserTarget and serverTarget 2019-11-26 13:07:13 -08:00
Charles Lyding
f3a23fc6f1 fix(@angular-devkit/build-angular): ensure build-angular's webpack version is used 2019-11-15 10:41:01 -08:00
Charles Lyding
cf116da464 fix(@angular-devkit/build-angular): normalize extract i18n format option 2019-10-17 10:45:01 -07:00
Alan Agius
38947d8643 refactor(@angular-devkit/build-angular): remove differential loading version 1.0 2019-10-15 11:22:34 -07:00
Alan Agius
c3169ae7d2 New i18n schema (#15760)
* feat(@angular-devkit/core): update schema to support new i18n options

"projects": {
  "my-app": {
    "projectType": "application",
    "schematics": {},
    "root": "",
    "i18n": {
      "sourceLocale": "en-US",
      "locales": {
        "fr": "src/locale/messages.fr.xlf"
      }
    },
    "sourceRoot": "src",
    ...
  }
}

* feat(@angular-devkit/build-angular): add new i18n options to browser and server builders

With this change we add `translateLocales` as new options for i18n in browser and server builders.

We also deprecate the following options;
* i18nLocale
* i18nFormat
* i18nFile

* feat(@angular-devkit/build-angular): deprecate `i18nFormat` and `i18nLocale` options of `extract-i18n` builder

Option `i18nFormat` has been deprecated in favor of `format` and `i18nLocale` option has been deprecated in favor of the `sourceLocale` sub option of the `i18n` project level option.

* feat(@angular/cli): add alias of `i18n-extract` for `x18n` command

* refactor: rename `translateLocales` to `localize`
2019-10-10 12:39:00 -07:00
Alan Agius
4d2ef2bf57 feat(@angular-devkit/build-angular): add support for i18n extraction with Ivy (#15796)
Re-enable i18n extraction in Ivy by using the legacy VE compiler.
2019-10-09 11:04:48 -07:00
Charles Lyding
0ed8de1e8a refactor(@angular-devkit/build-angular): cleanup compatible Angular version check 2019-06-19 17:06:28 -07:00
Alan
be210778f4 fix(@angular-devkit/build-angular): emit warning when using extract-i18n in Ivy
i18n is not yet implemented in Ivy, we should emit a warning stating this and exit gracefully.

This also swaps the readTsConfig logic to use `@angular/compiler-cli` instead of `typescript`. This is needed because when parsing the tsconfig, typescript is not aware of `angularCompilerOptions` and will not merged them if they are at un upper level tsconfig file when using `extends`.

Closes #14225
2019-06-14 12:56:33 -07:00
Alan Agius
4ad0fb73c3 fix(@angular-devkit/build-angular): always disable buildOptimizer when extracting i18n 2019-06-12 14:54:15 -07:00
Charles Lyding
68bc0c7bc1 fix(@angular-devkit/build-angular): extract i18n should only show warnings/errors
Fixes #14373
2019-05-10 15:08:10 -07:00
Charles Lyding
b7a26fa08b fix(@angular-devkit/build-angular): add Angular version check into required builders 2019-04-25 10:23:25 -07:00
Charles Lyding
bd16cbc98d refactor(@angular-devkit/build-angular): use webpack config utilities in browser builder 2019-04-12 12:17:21 -07:00
Charles Lyding
76492141d2 refactor(@angular-devkit/build-angular): cleanup architect imports 2019-04-03 16:28:16 +02:00
Charles Lyding
3d9200a3c8 refactor(@angular-devkit/build-angular): use build-webpack stable API module imports 2019-04-02 04:50:08 -07:00
Charles Lyding
ba21c855c0 refactor(@angular-devkit/build-angular): cleanup stable architect API builder file names 2019-03-29 14:37:35 -07:00
Charles Lyding
dd058a2cc3 refactor(@angular-devkit/build-angular): remove experimental architect builders 2019-03-29 14:37:35 -07:00
Charles Lyding
a011863477 feat(@angular-devkit/build-angular): implement stable architect API for extract-i18n 2019-03-25 12:39:05 -07:00
Charles Lyding
ebf90b3d6a refactor(@angular-devkit/build-angular): remove unused host parameter from typescript webpack methods 2019-03-13 13:55:26 -07:00
Hans Larsen
78f5c287d8 refactor(@angular-devkit/build-angular): clean up some interfaces and schemas
Remove the manually maintained schema.d.ts from the browser builder, and use
the Schema JSON file to generate it. This had a lot of repercussions around
the whole build-angular code base and the different interfaces that were
manually kept.
2019-02-21 16:20:54 -08:00
Alan Agius
af67b49342 refactor: clean up how to generate normalized build options and improve type safety 2018-12-06 11:44:27 -08:00
Filipe Silva
61871d37bb feat(@angular-devkit/build-angular): pass logger to ngtools/webpack 2018-10-04 13:33:24 -07:00
Hans Larsen
7ff1e1a33e feat(@angular-devkit/build-angular): add progress option to xi18n
Add progress option to xi18n. It is passed to the webpack builder.

Fixes #11667.
2018-09-27 12:45:42 -04:00
Alan Agius
e16c8bbe87 fix(@angular-devkit/build-angular): set the proper type to fileReplacements
Closes #11294
2018-09-06 10:51:04 -07:00