258 Commits

Author SHA1 Message Date
Alan Agius
cb9e51f687 refactor(@angular-devkit/build-angular): remove custom Webpack Stats types
Webpack 5 contains improved types that we can leverage.
2021-04-20 09:27:05 -05:00
Charles Lyding
e0cb8222ea fix(@angular-devkit/build-angular): replace Webpack 4 hashForChunk hook usage
Webpack 5 now uses a `chunkHash` hook that is accessible from `JavascriptModulesPlugin.getCompilationHooks()`. The `hashForChunk` hooks have been deprecated in Webpack 5.
2021-04-19 20:31:59 +02:00
Charles Lyding
d3bc530c10 refactor(@angular-devkit/build-angular): use Node.js promise fs API in service-worker augmentation
With the minimum version of Node.js now set to v12, the promise fs API can now be leveraged within the tooling.
This change also uses `copyFile` (with copy-on-write where available) to setup the the service worker files as well a streaming APIs to generate service worker hashes. Both of which improves performance and reduces memory usage.
2021-04-14 10:17:21 -04:00
Charles Lyding
bac563e5ee feat(@angular-devkit/build-angular): support specifying stylesheet language for inline component styles
A new build option named `inlineStyleLanguage` has been introduced that will allow a project to define the stylesheet language used in an application's inline component styles. Inline component styles are styles defined via the `styles` property within the Angular `Component` decorator. Both JIT and AOT mode are supported. However, JIT mode requires that inline styles only be string literals (compile-time partial evaluation is not supported in JIT mode). Currently supported language options are: `CSS` (default), `Sass`, `SCSS`, and `Less`. If the option is not specified, `CSS` will be used and enables existing projects to continue to function as expected.
2021-04-14 07:21:11 -04:00
Charles Lyding
330235230c refactor(@angular-devkit/build-angular): remove redundant webpack-sources dependency
The `webpack` package now exports the `Source` based classes directly.
2021-04-13 15:34:54 -04:00
Alan Agius
1532e32cc2 refactor: clean up webpack 4 code 2021-04-13 10:49:17 -04:00
Alan Agius
dee6b79489 refactor: remove @types/webpack 2021-04-12 10:02:07 -04:00
Alan Agius
0f4bbb58d4 refactor(@angular-devkit/build-angular): remove webpack 4 checks
These are no longer needed as we don't support Webpack 4 any longer
2021-04-12 10:02:07 -04:00
Alan Agius
5cf9a08dc7 refactor(@angular-devkit/build-angular): remove deprecated i18n options from server and browser builder
BREAKING CHANGE:

Removal of deprecated browser and server command options.
- `i18nFile`,  use `locales` object in the project metadata instead.
- `i18nFormat`, No longer needed as the format will be determined automatically.
- `i18nLocale`, use `localize` option instead.
2021-04-03 14:45:58 +02:00
Charles Lyding
677913fc38 fix(@angular-devkit/build-angular): remove usage of deprecated View Engine compiler
BREAKING CHANGE: Removal of View Engine support from application builds
With the removal of the deprecated View Engine compiler in Angular version 12 for applications, Ivy-based compilation will always be used when building an application.
The default behavior for applications is to use the Ivy compiler when building and no changes are required for these applications.
For applications that have opted-out of Ivy, a warning will be shown and an Ivy-based build will be attempted. If the build fails,
the application may need to be updated to become Ivy compatible.
2021-04-02 08:11:11 +02:00
Alan Agius
27a41f2615 build: update to critters 0.0.10 2021-03-30 14:35:11 -06:00
Alan Agius
74537a11d4 test(@angular-devkit/build-angular): update tests to reflect the change in ES targets 2021-03-15 20:31:25 +01:00
Alan Agius
075c988dd1 fix(@angular-devkit/build-angular): display correct filename for bundles that are ES2016+ 2021-03-12 08:26:04 +01:00
Alan Agius
8d66912323 refactor(@angular-devkit/build-angular): remove deprecated lazyModules option
BREAKING CHANGE:

Server and Browser builder `lazyModules` option has been removed without replacement.
2021-03-10 12:44:04 -06:00
Charles Lyding
b98d969a92 refactor(@angular-devkit/build-angular): remove speed-measure-plugin usage
The plugin was only used when the `NG_BUILD_PROFILING` environment variable was used.  The environment variable also enabled the Webpack builtin `ProfilingPlugin` which is retained.
The builtin plugin provides a chrome events JSON output which can be loaded in Chrome DevTools and allows for graphical timeline views of the build.
The `speed-measure-plugin` is also currently incompatible with Webpack 5 which would prevent the CLI profiling support from working with Webpack 5.
2021-03-10 08:19:56 -06:00
Alan Agius
84f39778cc fix(@angular-devkit/build-angular): only remove nomodule and defer attributes empty values
Closes #20207
2021-03-08 08:47:55 -06:00
Alan Agius
11b1d9c2d1 fix(@angular-devkit/build-angular): inline critical font-face rules when using crittical css inlining
When critical font rules are not inlined it will cause blinking as during first render the fallback font will be rendered.

Related to https://github.com/angular/universal/issues/2002
2021-02-26 16:01:42 -05:00
Alan Agius
aa3ea885ed feat(@angular-devkit/build-angular): enable inlineCritical by default
BREAKING CHANGE:

Critical CSS inlining is now enabled by default. If you wish to turn this off set `inlineCritical` to `false`.

See: https://angular.io/guide/workspace-config#optimization-configuration
2021-02-26 13:22:58 -05:00
Alan Agius
f309516bcd refactor(@angular-devkit/build-angular): drop support for zone.js 0.10
BREAKING CHANGE:

Minimum supported `zone.js` version is `0.11.4`
2021-02-17 12:44:43 -06:00
Alan Agius
1bbdbaf822 build: change angular packages local version to 0.0.0
The integration tests run in the framework repo use `0.0.0` as version and not a previously stated `0.0.0-PLACEHOLDER`
2021-02-12 08:34:00 -06:00
Charles Lyding
40dc44b64b refactor(@angular-devkit/build-angular): remove usage of Webpack Stats.ToJsonOutput type
The `Stats.ToJsonOutput` type is not present in the Webpack 5 typings. There was also a large amount of forced typing in the code to successfully compile.
Minimal Webpack JSON stat types are now used that represent the fields used by the tooling.
2021-02-11 12:33:47 -05:00
Alan Agius
fb2d7ee903 refactor(@angular-devkit/build-angular): remove experimental rollup pass
The experimental rollup pass has significant issues with the new Ivy webpack plugin. It also, didn't produce as well as we hoped in real world scenarios infact in many cases this caused build to fail.

REAKING CHANGE:

The experimental rollup pass `--experimental-rollup-pass` option has been removed.

Closes #15836
2021-02-09 08:50:00 -05:00
Alan Agius
088891b16e refactor(@angular-devkit/build-angular): refactor NodeJsAsyncHost to use FS promises 2021-02-08 14:07:24 -05:00
Alan Agius
aedfcc1862 build: update to @types/node version 12 2021-02-08 14:07:24 -05:00
Alan Agius
9030c9ee16 fix(@angular-devkit/build-angular): remove 0.0.0 version from supported Angular semver versions error message 2021-02-04 18:58:42 +01:00
Alan Agius
21a05d2ea0 fix(@angular-devkit/build-angular): error with status code when response code is not 200
During font inlining, a request can return a response status code other than 200. In which case, the contents of the page should not be inlined.
2021-02-02 16:54:53 +01:00
Alan Agius
2cf374a0fc refactor(@angular-devkit/build-angular): remove unused findUp method 2021-02-02 15:21:39 +01:00
Alan Agius
52d14d7261 refactor(@angular-devkit/build-angular): remove config barrel file export 2021-02-02 15:21:39 +01:00
Matt Lewis
42e439f6fd fix(@angular-devkit/build-angular): fix budgets for any script with differential loading enabled
Fixes #19849
2021-01-28 11:02:07 +01:00
Alan Agius
9af0942e69 fix(@angular-devkit/build-angular): inlining fonts behind proxy
With this change users can now their proxy server via the `HTTPS_PROXY` environment variable. The specified proxy will be used when making requests to inline fonts.

Closes #19401
2021-01-25 09:17:03 -06:00
Charles Lyding
6b2a8e175e refactor(@angular-devkit/build-angular): remove virtualfs host usage from browser/dev-server
The virtualfs Host was only used for exist and directory checks during asset and file replacement option normalization within the browser and dev-server builders.
2021-01-20 10:27:43 -05:00
Charles Lyding
7b106dd963 refactor(@angular-devkit/build-angular): remove unneeded no-implicit-dependencies tslint comments 2021-01-19 15:06:29 -05:00
Alan Agius
37d8e25af8 fix(@angular-devkit/build-angular): generate consistent filenames
With this change we generate consistent file names when using the browser builder in watch mode with differential loading.

Closes #15157
2021-01-12 17:06:17 +01:00
Charles Lyding
4f352ea204 refactor(@angular-devkit/build-angular): use script target in custom babel loader
This change uses the project's TypeScript configuration script target to determine the required Babel processing.
2021-01-11 08:22:10 +01:00
wenqi73
ab72f8dab0 feat(@angular-devkit/build-angular): support extracting and merging with arb format 2021-01-08 20:45:08 +01:00
Charles Lyding
11bbe7c45f refactor(@angular-devkit/build-angular): add internal custom file watcher support
This change adds internal support for providing a custom file watching mechanism to the browser (and associated) builders.  The support integrates and overrides the Webpack watch system when enabled.  This is currently intended to support builder unit testing use cases.
2021-01-05 11:02:57 +00: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
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
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
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
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
1237ddacea fix(@angular-devkit/build-angular): properly handle comment removal during font inlining
Closes #19350
2020-11-12 13:15:40 -05: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
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
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
83fab6b494 fix(@angular-devkit/build-angular): improve builder phase reporting 2020-11-02 13:35:52 -06: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
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