673 Commits

Author SHA1 Message Date
Charles Lyding
c569cd0be8 refactor(@angular-devkit/build-angular): use custom babel preset to configure babel-loader
A custom babel preset is introduced to centralize the configuration of babel within the package.  Application related presets and plugins are now encapsulated within the custom preset which is used via the Webpack babel-loader.  This new custom preset will also provide the integration point for the upcoming Angular linker.
2020-11-03 17:37:59 -06:00
Alan Agius
e0875de786 fix(@angular-devkit/build-angular): remove title attribute from inlined fonts style tag
title is not a valid style tag attribute.

Closes #19271
2020-11-02 13:45:29 -06: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
Alan Agius
6cd97b367a fix(@angular-devkit/build-angular): improve network error message during fonts inlining
Closes #19259
2020-11-02 13:36:37 -06:00
Alan Agius
f52fd29165 fix(@ngtools/webpack): show zone.js incompatibility warning when using ES2017+
Closes: #19226
2020-11-02 13:36:04 -06:00
Alan Agius
0d3d679ac2 fix(@angular-devkit/build-angular): improve server builder output logs 2020-11-02 13:35:52 -06:00
Alan Agius
4cee3eb9a5 fix(@angular-devkit/build-angular): show verbose logging when using --verbose and differential loading 2020-11-02 13:35:52 -06:00
Alan Agius
83fab6b494 fix(@angular-devkit/build-angular): improve builder phase reporting 2020-11-02 13:35:52 -06:00
Charles Lyding
ea02b6e947 fix(@angular-devkit/build-angular): re-enable webpack 5 license extraction support
With updates to the `license-webpack-plugin` and adjustments to the web worker plugin configuration, license extraction can now be used with webpack 5.  This change also removes the need to filter out the duplicate asset warning on Webpack 4 that was previously being generated.
2020-10-30 10:18:42 -05:00
Charles Lyding
05cd4d6109 fix(@angular-devkit/build-angular): use source locale with non-localized dev serving
The source locale was intended to be used when building an application; even when not specifically localizing.  This includes setting the HTML `lang` attribute, injecting locale data, and setting `LOCALE_ID` within the application.
2020-10-30 10:16:37 -05:00
Alan Agius
9425ce07a9 refactor(@angular-devkit/build-angular): remove host from index writer 2020-10-28 10:26:16 -04:00
Alan Agius
b45a2adba5 fix(@angular-devkit/build-angular): when optimizing don't wrap function arguments in parenthesis
With this change function and arrow function arguments are not wrapped in parenthesis during the optimization phase.

`wrap_func_args` which is enabled by default in terser will wrap function arguments in parenthesis. Recently this was also changed to wrap lamdas as well:
66c3a5ce66

An increase in bundle size was observed without this change. See: https://github.com/angular/angular/pull/39432#discussion_r512345752
2020-10-27 12:04:44 -04:00
Alan Agius
661c0f248f fix(@angular-devkit/build-angular): correctly index and remove webpack client script in non main chunk
Closes #19219
2020-10-27 10:45:51 -04:00
Alan Agius
c71e1691b9 build: update puppeteer to 5.4.0 2020-10-26 14:20:50 -04: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
3447709458 test(@angular-devkit/build-angular): remove sole NodeJsAsyncHost usage
The `NodeJsAsyncHost` was only used in one location within a unit test and was not required to be used in that location.
2020-10-26 10:13:59 -04:00
Charles Lyding
e22c196c32 fix(@angular-devkit/build-angular): support emitting AVIF image files 2020-10-23 14:43:18 -04:00
Alan Agius
f122b2f351 fix(@angular-devkit/build-angular): don't add publicHost pathname to sockPath in dev-server
With this change we remove the unintentional breaking change that added publicHost pathname to sockPath instead we now prepend the sockPath with the servePath, which can be either the passed servePath option, baseHref or deployUrl.
2020-10-22 15:49:20 +02:00
Alan Agius
faf650c990 refactor(@angular-devkit/build-angular): remove legacy server bundle guess logic
Closes #16353
2020-10-22 15:49:01 +02:00
Charles Lyding
cc723d8d74 feat(@angular-devkit/build-angular): support following symlinked asset directories
By default subdirectories within a symlinked directory are not searched by a glob.  The new `followSymlinks` option for the longhand form of the `assets` browser builder option now allows opting in to search such subdirectories.
2020-10-21 22:03:24 +02:00
Alan Agius
2298ab865b refactor(@angular-devkit/build-angular): remove deprecated browser build option rebaseRootRelativeCssUrls
BREAKING CHANGE:

Deprecated `rebaseRootRelativeCssUrls` browser builder option has been removed without replacement. This option was used to change root relative URLs in stylesheets to include base HREF and deploy URL and was used only for compatibility and transition as this behavior is non-standard.
2020-10-20 16:53:24 +02:00
Alan Agius
54fc6f1923 refactor(@angular-devkit/build-angular): minor cleanup to dev-server code 2020-10-20 08:51:41 +02:00
Alan Agius
7b77e92338 refactor(@angular-devkit/build-angular): remove allowed webpack and @angular-devkit/build-angular from CommonJsUsageWarnPlugin
These are no longer needed
2020-10-20 08:51:41 +02:00
Jaime Oliveira
ae94245131 fix(@angular-devkit/build-angular): add a base href to karma debug context
This commits adds a base href value in the karma context iframe used to run unit tests where a unit test throws:
No base href set. Please provide a value for the APP_BASE_HREF token or add a base element to the document.
Even if the application is fine.
This is because the index.html from Angular CLI contains a base href value, but not the Karma context iframe.
So when adding a unit test with a testing module that imports a NgModule, for example AppModule,
which itself imports RouterModule, the unit test used to throw an error (regression appeared in router 3.1).
That could be solved by either adding `RouterTestingModule` to the testing module,
or by adding a provider `{ provide: APP_BASE_HREF, useValue: '/' }`, but required to understand the issue.
This solves the issue in a transparent way: developers won't even encounter the problem anymore.

Closes #19116
2020-10-19 12:34:47 +02:00
Alan Agius
574d309cda fix(@angular-devkit/build-angular): don't set watchOptions in webpack-middleware
`webpack-dev-middleware` doesn't have a `watchOptions`

See: https://github.com/webpack/webpack-dev-middleware/blob/master/src/options.json
2020-10-16 21:08:18 +02:00
Alan Agius
f7f6eede23 fix(@angular-devkit/build-angular): disable dev-server live-reload when using protoactor
LIve-reload is not needed when using protoactor because watch mode is always disabled.
2020-10-16 21:08:18 +02:00
Alan Agius
247b87d40a refactor(@angular-devkit/build-angular): move dev-server webpack config in a separate file
With this change we remove webpack dev-server logic to a seperate file. We also use the webpack-dev-server API to add live-reload and hmr entry-points and settings.
2020-10-16 21:08:18 +02:00
Alan Agius
710e12dd7d fix(@angular-devkit/build-angular): correctly reference hmr-accept.js file in windows error
Backslashes need to be changed to forward slashes for absolute imports to work in Windows.

Closes #19099
2020-10-16 21:03:57 +02:00
Charles Lyding
eac9e994a6 fix(@angular-devkit/build-angular): ensure correct SRI values with differential loading
Previously, the cached integrity values for a subsequent differential loading build would not be properly integrated.  This resulted in builds with incorrect integrity values after an initial build.  The cached differential loading builds will now use the correct integrity values on subsequent builds.

Closes #18254
2020-10-16 12:07:16 +02:00
Charles Lyding
58a7deac67 fix(@angular-devkit/build-angular): set HTML lang attribute when serving
When using the non-deprecated localization options, the development server was not properly setting the HTML `lang` attribute for the application.  This change ensures that the active locale is used within the application's index HTML file.

Closes #18094
2020-10-15 18:59:32 +02:00
Alan Agius
e1d0d0898d docs(@angular-devkit/build-angular): improve headers option description 2020-10-15 18:30:24 +02:00
Alan Agius
4d2f4ec2c1 fix(@angular-devkit/build-angular): override already existing assets in compilation
With this change we align the copying of assets between `ng build` and `ng serve`. Previously in `ng serve` already copied assets where not overridden.

More info: https://webpack.js.org/plugins/copy-webpack-plugin/#force

Closes #18787
2020-10-15 17:16:59 +02:00
Alan Agius
1d0d90e1b1 refactor(@angular-devkit/build-angular): simplify global_defs usage from @angular/compiler-cli.
This change results in the same options being set. See: 66e6b932d8/packages/compiler-cli/src/tooling.ts (L25-L34)
2020-10-15 16:10:35 +02:00
Alan Agius
e253fffbe6 refactor(@angular-devkit/build-angular): move addition of HMR plugins and loaders to webpack configs 2020-10-14 21:57:47 +03:00
Alan Agius
7253802d74 refactor(@angular-devkit/build-angular): change hmr-accept to TypeScript
For the time being we cannot use the DOM lib because it conflicts with Node, In future when we remove `yarn admin build` we should have this as a seperate compilation unit.
2020-10-14 21:57:47 +03:00
Alan Agius
c345ec369f test(@angular-devkit/build-angular): test HMR using puppeteer 2020-10-14 21:57:47 +03:00
Alan Agius
16f7767983 fix(@angular-devkit/build-angular): remove .js files equivalent of css when using extract css 2020-10-14 21:57:47 +03:00
Alan Agius
221e821cad refactor(@angular-devkit/build-angular): use __filename instead of __dirname + filename 2020-10-14 21:57:47 +03:00
Alan Agius
e30e578d22 build: update mini-css-extract-plugin to version 1.0.0 2020-10-14 21:57:47 +03:00
Alan Agius
3c2da34972 fix(@angular-devkit/build-angular): only show cannot restore inputs/options when old length is > 0 2020-10-14 21:57:47 +03:00
Alan Agius
49841f84c5 fix(@angular-devkit/build-angular): include HMR accept code in main.ts
This fixes as issue where in some cases the changed module is not accepted which cases the dev-server to fallback to live-reload.

This is because the hmr.js and main.ts have different module ids.
2020-10-14 21:57:47 +03:00
Alan Agius
871dd6a434 feat(@angular-devkit/build-angular): enable font inlining optimizations
With this change we inline Google fonts and icons in the index html file when optimization is enabled.

**Before**
```html
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">
```
**After**
```html
<style>
  @font-face {
    font-family: 'Material Icons';
    font-style: normal;
    font-weight: 400;
    src: url(https://fonts.gstatic.com/s/materialicons/v55/flUhRq6tzZclQEJ-Vdg-IuiaDsNcIhQ8tQ.woff2) format('woff2');
  }

  .material-icons {
    font-family: 'Material Icons';
    font-weight: normal;
    font-style: normal;
    font-size: 24px;
    line-height: 1;
    letter-spacing: normal;
    text-transform: none;
    display: inline-block;
    white-space: nowrap;
    word-wrap: normal;
    direction: ltr;
  }
</style>
```

To opt-out of this feature set `optimization.fonts: false` or `optimization.fonts.inline: false` in the browser builder options.

Example:
```js
"configurations": {
  "production": {
    "fileReplacements": [
      {
        "replace": "src/environments/environment.ts",
        "with": "src/environments/environment.prod.ts"
      }
    ],
    "optimization": {
      "fonts": false
    },
```

More information about the motivation for this feature can be found: https://github.com/angular/angular-cli/issues/18730

Note: internet access is required during the build for this optimization to work.
2020-10-14 21:57:29 +03:00
Alan Agius
d8f758758c refactor(@angular-devkit/build-angular): add disk cache to font inliner 2020-10-14 21:57:29 +03:00
Alan Agius
2e6ad9e847 build: add @types/cacache 2020-10-14 21:57:29 +03:00
Alan Agius
6ec40d3a4d feat(@angular-devkit/build-angular): add font inliner
This is the base functionality needed to inline Google fonts and Icons in HTML.

The processor does a couple of things:
1. When support for older devices is needed where woff2 is not supported it will inline definitions for both woff1 and woff2
2. Will remove comments and whitespaces when it's `minifyInlinedCSS` is enabled.
3. Cache responses so to resuse the font response during watch mode.

Note: this is still an internal implementation which users cannot leverage just yet.
2020-10-14 21:57:29 +03:00
Charles Lyding
a4d31fd16e refactor(@angular-devkit/build-angular): fully temporarily disable Webpack 5 license extraction 2020-10-14 10:11:02 -04:00
Bjarki
db00a24b3c feat(@angular-devkit/build-angular): support custom headers in dev-server
Make it possible to configure dev-server to send custom HTTP headers on
every client request. These headers can be specified as a key-value map
under the new "headers" property of the dev-server builder in
angular.json. These headers are then passed on to the webpack devserver.

An example use case for this is to enable various security features,
such as CSP and Trusted Types, both in local application development and
in integration tests, by setting appropriate HTTP headers.

This is part of an effort to add support for Trusted Types in Angular.
The ability to enforce Trusted Types during development and integration
tests is essential, as this can help detect Trusted Types violations
that might otherwise break applications when they're pushed to
production where such security features may be enforced.
2020-10-13 12:36:19 -04:00
Charles Lyding
755cb8dc57 test(@angular-devkit/build-angular): disable experimental Rollup size tests
The experimental Webpack Rollup pass no longer produces smaller sizes than the standard production build.
2020-10-12 11:04:14 -04:00