768 Commits

Author SHA1 Message Date
Charles Lyding
faf7b26ef9 test(@angular-devkit/build-angular): add browser builder option test for main 2020-12-18 10:37:26 +01:00
Charles Lyding
bfd91096be test(@angular-devkit/build-angular): add harness file jasmine helpers
This change adds an `expectFile` jasmine helper function that reduces the amount of code necessary to check a file's existence, size, or content.  Additional contextual information is also displayed when an expectation fails.
2020-12-18 10:37:26 +01:00
Charles Lyding
97bfd46b67 test(@angular-devkit/build-angular): use harness for browser builder works test
This converts the 'works' spec to use the new builder harness for testing. The change also provides for a before/after comparison of an existing test.
2020-12-18 10:37:26 +01:00
Charles Lyding
bcac38331e test(@angular-devkit/build-angular): add builder test harness 2020-12-18 10:37:26 +01:00
Charles Lyding
0e5dab45ef fix(@angular-devkit/build-angular): use URL rewrite in karma fallback middleware
This changes the internal Angular Karma plugin's asset fallback middleware to rewrite the request URL directly instead of trying to copy the request properties.  With changes in newer Node.js versions, not all request properties may be enumerable.

Fixes: #19644
2020-12-18 08:31:59 +01:00
Alan Agius
ba9c755f33 fix(@angular-devkit/build-angular): add console error when using HMR in production mode
FIx: #19591
2020-12-15 12:25:15 +00:00
Alan Agius
e68c59a37c docs: update inline option description 2020-12-09 14:36:07 -05:00
Alan Agius
f0d18e990e docs: change sourcemap to source map
The latter is more in used in other articules such as:
-  https://developer.mozilla.org/en-US/docs/Tools/Debugger/How_to/Use_a_source_map
- https://developers.google.com/web/tools/chrome-devtools/javascript/source-maps
2020-12-09 14:36:07 -05:00
Keen Yee Liau
48a278e18f fix(@angular-devkit/build-angular): identify plugin provided as string
Karma plugins could be provided either a string or object, but our detection
logic for code coverage plugin only covers the string case.

Fix #19571
2020-12-09 09:52:57 -05:00
Charles Lyding
c94a1961fc fix(@angular-devkit/build-angular): define forwardRef as a pure function
By configuring the optimizer (`terser`) to be aware that the Angular `forwardRef` helper function is a pure function, the optimizer can completely remove the helper call when the return value is unused.
2020-12-08 19:54:14 -05:00
Alan Agius
d3afdcc1b3 fix(@angular-devkit/build-angular): add file path in CSS optimization exception
Closes #19561
2020-12-08 14:39:36 -05:00
Alan Agius
ca69c8c6b4 fix(@angular-devkit/build-angular): update ScriptsWebpackPlugin to work with Webpack 5
Closes: #19550
2020-12-07 15:23:29 -05:00
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
ee6bb1359f docs: fix elimination typo 2020-12-04 13:42:26 -05:00
Alan Agius
227804fd6e fix(@angular-devkit/build-angular): stylus not resolving imports from libraries
- Adds usage of webpackImporter https://www.npmjs.com/package/stylus-loader#webpackimporter
- Removes resolve-url-loader usage since stylus handles resolve paths https://stylus-lang.com/docs/js.html#stylusresolveroptions

Closes #19524
2020-12-03 12:59:08 -05:00
Alan Agius
a46bad4e31 fix(@angular-devkit/build-angular): fix termination of process when using CTRL+C
Closes #19531
2020-12-03 12:58:49 -05:00
Alan Agius
6fe8a6338d fix(@angular-devkit/build-angular): update index html webpack plugin to use non deprecated Webpack 5 API 2020-12-03 10:42:09 -05:00
Alan Agius
b546d798bc docs: add description to localize option 2020-11-30 19:04:21 +01:00
Alan Agius
064d62014c fix(@angular-devkit/build-angular): resolve partial SCSS files in sourcemaps
Closes #19505
2020-11-30 11:17:20 +01:00
Charles Lyding
f8b9fecf88 fix(@angular-devkit/build-angular): allow default Webpack 5 caching
With upstream fixes in place, the default Webpack 5 caching behavior can now be enabled.  In development mode, memory caching will now be used, and in production, caching will be disabled as per Webpack 5 default behavior.
2020-11-26 09:17:12 +01: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
Alan Agius
d71ee210bf fix(@angular-devkit/build-angular): apply local libraries sourcemap without vendor: true
With this change we apply sourcemaps of libraries in a monorepo without the need to enable `vendor: true`. This is more intuitive behavior and  in line with what the users expect.

We also suppress the `Failed to parse source map from` in-actionable warning.

Closes #11305
2020-11-24 13:33:50 +00:00
Alan Agius
9908b59fd1 fix(@angular-devkit/build-angular): handle HTML file with no body and head tags
Closes #19426
2020-11-20 11:38:04 +00:00
Alan Agius
0b06fd6951 fix(@angular-devkit/build-angular): disable output hashing when running dev-server
Using output hashing with the dev-server can cause memory leaks because the dev server does not know when to clean up the old files.

See: https://github.com/webpack/webpack-dev-server/issues/377#issuecomment-241258405

Closes #10411
2020-11-20 11:37:39 +00:00
Alan Agius
c8aafad607 test(@angular-devkit/build-angular): add test to simulate dotnet proxy 2020-11-18 13:18:16 -05:00
Alan Agius
f67c612393 fix(@angular-devkit/build-angular): ERR_SSL_PROTOCOL_ERROR when using HTTPS reverse proxy
With this change we set the publicHost to `0.0.0.0:0`, when it's not provided.

This solved issues where previously the publicHost needed to be specified directly to get around `ERR_SSL_PROTOCOL_ERROR` error when proxing https -> http.

NB: this was also the behaviour in version 10 c252968225/packages/angular_devkit/build_angular/src/dev-server/index.ts (L170)

Closes #19403
2020-11-17 15:40:43 -05:00
Mike Hartington
0f72ca45c3 fix(@angular-devkit/build-angular): ignore hidden inputs with hmr
Closes #19385
Don't query for hidden inputs when using HMR
2020-11-16 13:14:06 -05:00
Alan Agius
9d82269441 refactor(@angular-devkit/build-angular): clean up index generation part 3
With this change we cleanup the index generation. The `IndexHtmlWebpackPlugin` now extends the base `IndexHtmlGenerator` class which makes it easier to override methods to retrieve compilation assets. This is important for the critical css extraction implementation because Critters needs to access the `assets` from the either the compilation when running in memory or the file-system.
2020-11-16 13:03:12 -05:00
Charles Lyding
48c7a85f0a refactor(@angular-devkit/build-angular): support postcss 8
This change updates the internal postcss plugins to use the postcss 8 API as well as updates the versions of all external plugins to postcss 8 supported versions.
2020-11-16 08:51:30 -05:00
Charles Lyding
3acd694db3 fix(@angular-devkit/build-angular): remove workaround for Webpack 5 sourcemaps
The `webpack-sources` library no longer throws an error when used to process sourcemaps during differential loading.
2020-11-16 08:50:37 -05:00
Alan Agius
715a7a5570 fix(@angular-devkit/build-angular): allow json files in fileReplacement
JSON files a can also be valid fileReplacement when using the `resolveJsonModule` TypeScript feature. This causes JSON files to be resolved as JS modules and hence be part of the TypeScript program.

Closes #19378
2020-11-13 15:53:14 -05:00
Alan Agius
5222a2e9b3 test(@angular-devkit/build-angular): add css file so that a sourcemap can be generated when optimization is enabled 2020-11-12 15:25:28 -05:00
Alan Agius
88a3794524 fix(@angular-devkit/build-angular): show missing karma-coverage error when it's not configured
This fixes an issue where previously `karma-coverage must be installed in order to run code coverage` error was shown incorrectly.

Closes: #19359
2020-11-12 13:53:20 -05:00
Alan Agius
2a1b6b1dc7 fix(@angular-devkit/build-angular): separate initial total size in build output
```
Initial Chunk Files                      | Names                |      Size
main-es5.6f60fbc22c7e19b5d179.js         | main                 | 154.89 kB
main-es2015.6f60fbc22c7e19b5d179.js      | main                 | 135.87 kB
polyfills-es5.0351d1276e488726c8dc.js    | polyfills-es5        | 129.34 kB
polyfills-es2015.904e51532a46df6b991c.js | polyfills            |  36.12 kB
scripts.b7f93721b30caf483f97.js          | scripts              |   3.45 kB
runtime-es2015.76bfea807ccb0a24e182.js   | runtime              |   1.45 kB
runtime-es5.76bfea807ccb0a24e182.js      | runtime              |   1.45 kB
styles.3ff695c00d717f2d2a11.css          | styles               |   0 bytes

                                         | Initial ES5 Total    | 289.13 kB
                                         | Initial ES2015 Total | 176.88 kB
```

Closes #19330
2020-11-12 13:15:59 -05:00
Alan Agius
1237ddacea fix(@angular-devkit/build-angular): properly handle comment removal during font inlining
Closes #19350
2020-11-12 13:15:40 -05:00
Alan Agius
424af28602 fix(@angular-devkit/build-angular): add validation to fileReplacement values
fileReplacement is meant to replace compilation source files (JavaScript or TypeScript) with other compilation source files in the build. With this change we add validation to fail the build when the files have unsupported extensions.

Closes #11451
2020-11-06 21:16:38 +01:00
Charles Lyding
6703a7f987 fix(@angular-devkit/build-angular): convert file replacements to system paths before use
The file replacement normalization generates internal Path objects which are not compatible with Windows system paths when used externally.
2020-11-05 18:45:52 +01:00
Charles Lyding
1479b3e8ed test(@angular-devkit/build-angular): improve resilience of lazy module rebuild test
Rebuild tests that involve file watching can be very flaky on CI.  This change adds a debounce time which is also used in the other rebuild tests within the package.
2020-11-05 08:31:12 +01:00
Charles Lyding
4e168b81c5 refactor(@angular-devkit/build-angular): integrate Ivy Webpack compiler plugin
This change integrates the Ivy Webpack compiler plugin into the browser builder.
When Ivy is enabled, which is the default behavior for applications, this plugin will now be used.
If needed, the previous plugin can still be used by enabling the `NG_BUILD_IVY_LEGACY` environment variable.
2020-11-05 08:31:12 +01:00
Alan Agius
51d6c3cb4c fix(@angular-devkit/build-angular): add default value to progress option 2020-11-05 08:30:14 +01:00
Alan Agius
cc300212de Revert "fix(@angular-devkit/build-angular): don't generate vendor.js.map when vendor sourcemaps is disabled"
This reverts commit b17763b03d7ca1ce5d2a85d2d03d0029b6623339.

Closes #19236
2020-11-03 17:43:53 -06:00
Alan Agius
090fdf0ad3 fix(@angular-devkit/build-angular): reduce clutter in dev-server logs
Add new lines to reduce logs clutter.
2020-11-03 17:42:15 -06:00
Alan Agius
66c3f79fc2 fix(@angular-devkit/build-angular): right align size column and add total bundle size 2020-11-03 17:42:01 -06:00
Alan Agius
814ea664d6 fix(@angular-devkit/build-angular): show bundle sizes with 2 decimal places
Before
```
Initial Chunk Files | Names     | Size
vendor.js           | vendor    | 2.07 MB
polyfills.js        | polyfills | 141.3 kb
main.js             | main      | 55.77 kb
runtime.js          | runtime   | 6.15 kb
styles.css          | styles    | 119 bytes
```

After
```
Initial Chunk Files | Names     | Size
vendor.js           | vendor    | 2.07 MB
polyfills.js        | polyfills | 141.30 kb
main.js             | main      | 55.77 kb
runtime.js          | runtime   | 6.15 kb
styles.css          | styles    | 119 bytes
```
2020-11-03 17:42:01 -06:00
Alan Agius
40c25a1e4f fix(@angular-devkit/build-angular): sort bundle stats by size
Before
```
Initial Chunk Files | Names     | Size
runtime.js          | runtime   | 6.15 kB
main.js             | main      | 56.9 kB
vendor.js           | vendor    | 2.4 MB
polyfills.js        | polyfills | 141 kB
styles.css          | styles    | 119 bytes
```

After
```
vendor.js           | vendor    | 2.07 MB
polyfills.js        | polyfills | 141 kB
main.js             | main      | 55.8 kB
runtime.js          | runtime   | 6.15 kB
styles.css          | styles    | 119 bytes
```
2020-11-03 17:42:01 -06:00
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