790 Commits

Author SHA1 Message Date
Alan Agius
dbdd3fc857 feat(@angular-devkit/build-angular): out of the box hot module replacement (HMR)
With this change we configure HMR internally and therefore users which want to use basic HMR functionality will not longer be required to change their application code.

This is important because previously a lot of users missed out on HMR or reported a broken behaviour. This also gives novice users a better chance to appreciate HMR and Angular because of the zero effort required to use HMR.

Closes #17324
2020-09-25 20:21:33 +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
Charles Lyding
93e2438954 test(@angular-devkit/build-angular): test Ivy specific files in unused file tests
The test was previously run only in Ivy mode but with VE specific test case files.  The test now also enables strict templates to ensure template type checking files are properly excluded.
2020-09-24 14:30:15 +02:00
Alan Agius
b9c98ee5f1 fix(@angular-devkit/build-angular): add missing defaults to optimization property 2020-09-24 14:27:25 +02:00
Joey Perrott
25aa2d5929 refactor: remove usages of the term whitelist 2020-09-24 00:07:10 +03:00
Alan Agius
ce17094e0e refactor(@angular-devkit/build-angular): lazy require speed-measure-webpack-plugin 2020-09-23 11:22:58 -05:00
Alan Agius
ee14ab0193 refactor(@angular-devkit/build-angular): use optional chaining operator where possible in browser builder 2020-09-23 11:22:58 -05:00
Alan Agius
a73c947205 refactor(@angular-devkit/build-angular): use architect builder output error instead of logger 2020-09-23 11:22:58 -05:00
Alan Agius
76557029a9 style: add proper indentation to RXJS pipe operators 2020-09-23 11:22:58 -05:00
Alan Agius
11c6abdd79 refactor(@angular-devkit/build-angular): clean up differential loading config generation
Closes #16098
2020-09-23 11:22:58 -05:00
Alan Agius
f10f910ec9 refactor(@angular-devkit/build-angular): remove esVersionInFileName build option
This option can be determined via `wco.differentialLoadingMode`
2020-09-23 11:22:58 -05:00
Alan Agius
33f5b60069 refactor(@angular-devkit/build-angular): remove target parameter from BuildBrowserFeatures ctor 2020-09-23 11:22:58 -05: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
Charles Lyding
e5266fdd44 refactor(@angular-devkit/build-angular): temporarily disable Webpack 5 license extraction
The license extraction plugin is currently causing errors when building/serving with Webpack 5.  This change temporarily disables the option when Webpack 5 is used until further investigation can take place and to unblock initial Webpack 5 support.
2020-09-21 11:55:11 -05:00
Charles Lyding
ea2b19cedc refactor(@angular-devkit/build-angular): adjust Webpack configuration based on version 4/5
This change adds helpers to allow the Webpack configuration to be automatically adjusted based on the Webpack version in use.
These helpers are then used to provide configuration compatibility for Webpack 5 which has several differences to the Webpack 4 configuration.
Behavior is maintained between the two versions so that external option behavior is not altered.
2020-09-21 11:55:11 -05:00
Alan Agius
99210b203d fix(@angular-devkit/build-angular): add node-sass deprecation warning 2020-09-18 14:53:31 -05:00
Alan Agius
5996896076 feat(@angular-devkit/build-angular): improve build stats output format
With this change we also remove sourcemaps from build info to align with Webpack 5 output.
2020-09-18 14:52:38 -05:00
Alan Agius
13b17baebe refactor(@angular-devkit/build-angular): add spinners for localize and downlevelling 2020-09-16 10:38:58 -04: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
Charles Lyding
9144cf87ff refactor(@angular-devkit/build-angular): support Webpack 5 errors/warnings
Webpack 5 uses an object to represent errors and warnings unlike Webpack 4 which used a string.  This change provides support for both scenarios.
2020-09-14 15:54:30 -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
622d08447d refactor: use ansi-colors instead of removed terminal utils 2020-09-10 20:19:33 +02:00
Charles Lyding
f31f853de8 refactor(@angular-devkit/build-angular): use Webpack ChunkGraph API in SuppressExtractedTextChunksWebpackPlugin 2020-09-10 19:46:45 +02:00
Alan Agius
9087197e4a fix(@angular-devkit/build-angular): set logging level to verbose when using --verbose 2020-09-10 17:53:02 +02: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
Alan Agius
0a9e1fd3af build: update postcss-loader to version 4.0 2020-09-09 18:31:29 +02:00
Charles Lyding
16fabddbf1 refactor(@angular-devkit/build-angular): support dedupe plugin with Webpack 5
The structure of the data from the `afterResolve` hook has changed in Webpack 5.  This change provides compatibility for both the Webpack 5+ and Webpack 4 variants.
2020-09-09 10:47:13 +02:00
Charles Lyding
22ecb13986 fix(@angular-devkit/build-angular): filter unactionable System.import webpack warning
Webpack 5+ has no facility to disable this warning. `System.import` is used in `@angular/core` for deprecated string-form lazy routes.
2020-09-09 00:05:40 +02:00
Alan Agius
72097ea55c refactor(@angular-devkit/build-angular): lazy require autoprefixer, mini-css-extract-plugin and postcss-import 2020-09-08 19:47:09 +02:00
Keen Yee Liau
8995e49f0b feat(@angular-devkit/build-angular): Switch to karma-coverage
This commit switches coverage tooling from karma-coverage-istanbul-reporter
to karma-coverage since it's better supported.

Closes #17757
2020-09-06 12:22:25 +02:00
Alan Agius
5f064eba74 build: update @types/webpack to 4.41.22 2020-09-03 18:08:09 +02:00
Alan Agius
e95b73f6fb refactor(@angular-devkit/build-angular): set resolve roots to projectRoot
Previously roots was the same as context which was set to projectRoot, however in the previous change we changed the context to workspaceRoot.

With this change we maintain the same resolve root setting.

More info:
4a3e4bda6b/lib/config/defaults.js (L875)

 https://webpack.js.org/configuration/resolve/
2020-09-03 18:08:09 +02:00
Alan Agius
086d74d2b4 fix(@angular-devkit/build-angular): improve debugging experience
With this change we improve the debugging experience with 2 things.

1. Cleaner Karma stack traces in the terminal
Before
```
Chrome 84.0.4147.105 (Mac OS 10.15.5) AppComponent should have as title 'foo' FAILED
        Error: Expected 'foo' to equal 'fox'.
            at <Jasmine>
            at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/projects/foo/src/app/app.component.spec.ts:22:23)
            at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-evergreen.js:364:1)
            at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-testing.js:292:1)
Chrome 84.0.4147.105 (Mac OS 10.15.5): Executed 3 of 3 (1 FAILED) (0 secs / 0.214 secs)
Chrome 84.0.4147.105 (Mac OS 10.15.5) AppComponent should have as title 'foo' FAILED
        Error: Expected 'foo' to equal 'fox'.
            at <Jasmine>
            at UserContext.<anonymous> (http://localhost:9876/_karma_webpack_/webpack:/projects/foo/src/app/app.component.spec.ts:22:23)
            at ZoneDelegate.invoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zone-evergreen.js:364:1)
            at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (http://localhost:9876/_karma_webpack_/webpack:/node_modules/zone.js/dist/zChrome 84.0.4147.105 (Mac OS 10.15.5): Executed 3 of 3 (1 FAILED) (0.225 secs / 0.214 secs)
```

After
```
Chrome 84.0.4147.105 (Mac OS 10.15.5) AppComponent should have as title 'foo' FAILED
        Error: Expected 'foo' to equal 'fox'.
            at <Jasmine>
            at UserContext.<anonymous> (projects/foo/src/app/app.component.spec.ts:22:23)
            at ZoneDelegate.invoke (node_modules/zone.js/dist/zone-evergreen.js:364:1)
            at ProxyZoneSpec.push../node_modules/zone.js/dist/zone-testing.js.ProxyZoneSpec.onInvoke (node_modules/zone.js/dist/zone-testing.js:292:1)
Chrome 84.0.4147.105 (Mac OS 10.15.5): Executed 2 of 3 (1 FAILED) (0 secs / 0.225 secs)
Chrome 84.0.4147.105 (Mac OS 10.15.5) AppComponent should have as title 'foo' FAILED
        Error: Expected 'foo' to equal 'fox'.
            at <Jasmine>
            at UserContext.<anonymous> (projects/foo/src/app/app.component.spec.ts:22:23)
            at ZoneDelegate.invoke (node_modules/zone.js/dist/zone-evergreen.js:364:1)
Chrome 84.0.4147.105 (Mac OS 10.15.5): Executed 3 of 3 (1 FAILED) (0.281 secs / 0.237 secs)
```

2. Reduce VS Code configuration
Before
```
{
  "name": "ng test",
  "type": "chrome",
  "request": "launch",
  "url": "http://localhost:9876/debug.html",
  "webRoot": "${workspaceFolder}",
  "sourceMaps": true,
  "sourceMapPathOverrides": {
    "webpack:/*": "${webRoot}/*",
    "/./*": "${webRoot}/*",
    "/src/*": "${webRoot}/*",
    "/*": "*",
    "/./~/*": "${webRoot}/node_modules/*"
  }
},
```

After
```
{
  "name": "ng test",
  "type": "chrome",
  "request": "launch",
  "url": "http://localhost:9876/debug.html",
  "webRoot": "${workspaceFolder}",
},
```
2020-09-03 18:08:09 +02:00
Alan Agius
ee7d8f64c8 fix(@angular-devkit/build-angular): generate sourcemaps with relative paths in monorepo
With this change we fix the issue that when having a monorepo style workspace, sourcemaps sources references absolute paths.

Closes #17046
2020-09-03 18:08:09 +02:00
Charles Lyding
a3e404bf16 fix(@angular-devkit/build-angular): correct i18n function parameter type
The type of the first parameter of the internal unwrapTemplateLiteral function should be a `NodePath<types.TaggedTemplateExpression>` not a `NodePath<types.TemplateLiteral>`.
2020-09-03 00:23:30 +03:00
Alan Agius
f5ee8a0c1a fix(@angular-devkit/build-angular): don't generate vendor.js.map when vendor sourcemaps is disabled
This reduced the build time of an `ng new` application from `5920ms` to `4616ms`

Closes #18060
2020-09-03 00:22:08 +03:00
Charles Lyding
484c94ef0a refactor(@angular-devkit/build-angular): support Webpack with no node shims
Webpack 5+ no longer provides node shims by default.  The dev-server builder previously assumed that Webpack would provide them.  This change adds a conditional check to cover both cases.
2020-09-03 00:20:54 +03: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
Alan Agius
d49888b350 docs: update fileReplacements description 2020-08-31 11:58:04 +01:00
Alan Agius
197e96b8c5 refactor(@angular-devkit/build-angular): remove deprecated scripts[].lazy and styles[].lazy
BREAKING CHANGE:

- Deprecated `scripts[].lazy` has been renamed with `scripts[].inject`
- Deprecated `styles[].lazy` has been renamed with `styles[].inject`

Note: this change only effects direct `@angular-devkit/build-angular` users and not application developers. Users will be migrated automatically off these options.
2020-08-31 11:54:23 +01:00
Alan Agius
dd260185a1 refactor(@angular-devkit/build-angular): deprecate extractCss browser builder option
BREAKING CHANGE:

Browser builder `extractCss` option default value has been changed from `false` to `true`. This is to reflect the default behaviour when this deprecated option is removed.
2020-08-31 11:54:23 +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
156e31778f feat(@angular-devkit/build-angular): ask to use a new port if in use
The dev-server builder will now ask the user if an available port can be used when a specified port is already in use.  If the user answers in the affirmative, an available port will be used instead.  Otherwise, the serve operation will fail.  If the terminal is not interactive (for example, CI), the serve operation will fail directly in the event of an already in use port.
2020-08-28 08:52:40 +01:00
Alan Agius
86fe03c979 build: update webpack-merge to version 5.1.2 2020-08-28 08:50:30 +01:00
Charles Lyding
854d1844db fix(@angular-devkit/build-angular): support @angular/localize 10.1.0
Several utility functions within `@angular/localize` were updated in 10.1.0.  This change ensures that this newer version will function with 10.1.0 of `@angular-devkit/build-angular`.
2020-08-26 18:46:14 -04: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
Hari G
61701ab259 fix(@angular-devkit/build-angular): handle base tag endOffset in index.html generation
* fix endOffset if the base tag is already present
* add test case for this

Closes #18381
2020-08-25 12:52:38 -04:00
Charles Lyding
0d7e0f5eb5 style(@angular-devkit/build-angular): remove duplicate license header 2020-08-24 07:50:01 -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