183 Commits

Author SHA1 Message Date
Filipe Silva
ef7a07050a test(@angular-devkit/build-angular): build and test with Bazel 2020-04-30 15:12:46 -07:00
Alan Agius
8fb7e586cc refactor(@angular-devkit/build-angular): remove deprecated evalSourceMap, vendorSourceMap, profile and skipAppShell options
BREAKING CHANGE:

The following deprecated devkit builders options have been removed:
- `skipAppShell:` This has no effect
- `evalSourceMap`: This done to improve performance in older versions of the CLI and is no longer needed
- `vendorSourceMap`: Use `sourceMap.vendor` instead
- `profile`: Use `NG_BUILD_PROFILING` environment variable instead
2020-04-27 15:08:15 -07:00
Alan Agius
69aa460335 refactor(@angular-devkit/build-angular): remove deprecated es5BrowserSupport build option
BREAKING CHANGE
Deprecated browser builder option `es5BrowserSupport` has been removed. The inclusion for ES5 polyfills will be determined from the browsers listed in the browserslist configuration.
2020-04-22 10:38:19 -07:00
Charles Lyding
8a3e655845 fix(@angular-devkit/build-angular): avoid overwriting localize sourcemaps 2020-04-06 10:00:00 -07:00
Alan Agius
ea11c5549a feat(@angular-devkit/build-angular): show warnings when depending on CommonJS.
Depending on CommonJS modules is know to cause optimization bailouts. With this change when running a browser build and scripts optimization is enabled we display a warning.

To suppress the warning for a particular package, users can use the `allowedCommonJsDepedencies` builder options.

Example:
```
"build": {
  "builder": "@angular-devkit/build-angular:browser",
  "options": {
    ...
    "allowedCommonJsDepedencies": ["bootstrap"]
  },
}
```

Reference: TOOL-1328
2020-03-23 14:20:21 -07:00
Fabian Wiles
bc5ce395e5
Merge pull request #16648 from Toxicable/preserve-symlink-nodejs
feat(@angular-devkit/build-angular): default to NodeJS value for pres…
2020-03-23 14:18:27 -07:00
Charles Lyding
f0bada1925 fix(@angular/cli): allow for private use language subtags
Fixes:  #17163
2020-03-16 21:44:42 -07:00
Alan Agius
4e65705205 fix(@angular-devkit/build-angular): baseHref with protocol and localize option
`posix.join` will dedupe double forward slashes resulting in incorrect protocol.

Closes: #17029
2020-02-24 12:39:47 -08:00
Sachin Grover
764b977de4 fix(@angular/cli): expand locale pattern in all schemas for all cases
Fixes: #17032
2020-02-24 12:39:35 -08:00
Charles Lyding
6091879428 fix(@angular-devkit/build-angular): generate correct filenames when targeting ESNext
Fixes: #16906
2020-02-12 12:01:42 -08:00
Alan Agius
d0ede14918 refactor: remove safari nomodule polyfills as it's unsupported 2020-02-11 08:47:20 -08:00
Alan Agius
a2c0532ca7 fix(@angular-devkit/build-angular): provide supported browsers to babel
By default the browserslist `configPath` will default to `process.cwd()`. This might return incorrect data in a multi app workspace setup.

https://babeljs.io/docs/en/babel-preset-env#configpath
2020-02-04 07:29:27 -08:00
Alan Agius
237c1dcf2b build: update jest-worker to version 25.1.0 2020-01-23 15:28:37 -08:00
Alan Agius
490c24be98 fix(@angular-devkit/build-angular): add sourceMappingURL comment for ES2015 during differential loading
When having differential loading enabled we only add the `sourceMappingURL` comment when optimization is enabled, because we only process these bundles when we enabling optimization.

With this change we now process such bundles even when optimization is disabled and add `sourceMappingURL` when source maps are enabled and not hidden.

Closes #16522
2020-01-02 11:27:27 -08:00
Doug Parker
982df7e77a fix(@angular-devkit/build-angular): update budgets to check differential builds separately
Fixes #15792.

Previously, budgets would include content for both versions of a differential build. Thus the `initial` budget would count content from the ES5 **and** ES2015 bundles together. This is a very misleading statistic because no user would download both versions. I've updated the budget calculators to take this into account and generate size values for both builds which are then checked independently of each other.

The only calculators I changed are the `InitialCalculator` (for computing `initial` bundle sizes) and `BundleCalculator` (for computing named bundles). Since budgets are handled by Webpack for builds without differential loading, the `initial` bundle will always have those two sizes. The `BundleCalculator` might reference a bundle which does not have differential loading performed (such as a CSS file), so it emits sizes depending on whether or not multiple builds were found for that chunk.

Most of the other calculators don't really need to take differential loading into account. `AnyScriptCalculator` and `AnyCalculator` already apply on a file-by-file basis, so they generate sizes for both build versions already. `AnyComponentStyleCalculator` only applies to CSS which does not have differential builds.

The wierd ones here are `AllCalculator` and `AllScriptCalculator` which reference files with and without differential builds. Conceptually, they should be separated, as a "total" budget specified by an app developer probably wanted it to mean "the total resources a user would have to download", which would only be one differential build at a time. However, I don't see a good way of identifying which assets belong to which differential build. Even if an asset belongs to a chunk with differential builds, we don't know which build takes which assets into account. I decided to leave this for the time being, but it is probably something we should look into separately.

Since budgets take differential loading into account, users might reasonably want to set different budgets for different builds (ie. "initial-es2015 bundle should be capped at 100k, but initial-es5 bundle can go to 150k"). That's more of a feature request, so I also left that out for a future PR.
2019-12-09 15:26:50 -08:00
Doug Parker
6427922415 fix(@angular-devkit/build-angular): remove async files from initial bundle budget.
Refs #15792.

Static files listed in `angular.json` were being accounted in the `initial` bundle budget even when they were deferred asynchronously with `"lazy": true` or `"inject": false`. Webpack belives these files to be `initial`, so this commit corrects that by finding all extra entry points and excluding ones which are explicitly marked by the application developer as asynchronous.

One edge case would be that the main bundle might transitively depend on one of these static files, and thus pull it into the `initial` bundle. However, this is not possible because the files are not present until the end of the build and cannot be depended upon by a Webpack build step. Thus all files listed by the application developer can be safely assumed to truly be loaded asynchronously.
2019-12-09 15:26:50 -08:00
Doug Parker
1792ccaf57 refactor(@angular-devkit/build-angular): move budget computations to be post-build
Refs #15792.

This provides access to all the size information necessary because all build steps have already completed. This commit is roughly a no-op because it simply moves the budget checks (for different builds) to be executed post-build.

The lone exception is the AnyComponentStyle budget. Component stylesheet files are not emitted after the build is completed, so there is no size information to work with. Instead, these budgets are checked during a separate plugin (exected for different builds **and** non-differential builds).
2019-12-09 15:26:50 -08:00
Charles Lyding
713f95d678 fix(@angular-devkit/build-angular): localize service worker base href 2019-12-09 13:39:06 -08:00
Charles Lyding
c37eaeec43 fix(@angular-devkit/build-angular): augment base HREF when localizing
All locale i18n options now support an object form which allows a base HREF to be defined for the locale.  Each locale can now optionally define a custom base HREF that will be combined with the base HREF defined for the build configuration.  By default if the shorthand form for the locale is used or the field is not present in the longhand form, the locale code will be used as the base HREF.  To disable automatic augmentation a base HREF value of an empty string (`""`) can be used.  This will prevent anything from being added to the existing base HREF.

For common scenarios, the shorthand form will result in the preferred and recommended outcome of each built locale variant of the application containing a defined base HREF  containing the locale code.
2019-12-04 08:14:16 -08:00
Charles Lyding
1d79b28c17 fix(@angular-devkit/build-angular): support differential loading for web workers
Fixes #16275
2019-12-02 10:19:38 -08:00
Charles Lyding
09a7d87f00 fix(@angular-devkit/build-angular): ensure HTML lang attribute is set when localizing 2019-12-02 10:17:57 -08:00
Charles Lyding
cfc0aa4780 fix(@angular-devkit/build-angular): properly process es2016+ targets with differential loading
A target of es2015 was previously assumed when using differential loading.  This could result in erroneously downleveling an es2016+ output file instead of generating a new es5 output file.
2019-11-20 13:21:58 -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
862b28f844 fix(@angular-devkit/build-angular): allow localization with development server (#16053)
* fix(@angular-devkit/build-angular): allow localization with development server

* test: ensure i18n application E2E tests are executed
2019-11-08 07:56:05 -08:00
Alan Agius
e70a2b04bd refactor(@angular-devkit/build-angular): use compiler parsed value of enableIvy
At the moment we are relying on source content to determine if the compilation is under Ivy or VE. However, we do know what compilation we are in from the parsed tsconfig.

With this change we use the `enableIvy` to set the analytics metric
2019-11-01 10:24:20 -07:00
Charles Lyding
a420549548 fix(@angular-devkit/build-angular): augment with serviceworker during localization 2019-10-30 09:36:46 -07:00
Alan Agius
588baa5737 fix(@angular-devkit/build-angular): i18n app shell with Ivy 2019-10-30 09:36:14 -07:00
Alan Agius
0686ceff67 fix(@angular-devkit/build-angular): i18n with Ivy in universal builder 2019-10-25 09:52:56 -07:00
Alan Agius
936a9512ae refactor(@angular-devkit/build-angular): move around i18n methods to make them re-usable 2019-10-25 09:52:56 -07:00
Charles Lyding
276032c962 fix(@angular-devkit/build-angular): use project root as translation file base 2019-10-24 12:04:42 -07:00
Charles Lyding
294ecdd7f3 fix(@angular-devkit/build-angular): remove @angular/localize from application if localizing 2019-10-24 12:04:42 -07:00
Charles Lyding
30536881f9 fix(@angular-devkit/build-angular): set locale identifier when localizing 2019-10-24 12:04:13 -07:00
Charles Lyding
5597f7fedc refactor(@angular-devkit/build-angular): allow control of cache location
`NG_BUILD_CACHE` can specify an absolute path to be used as the cache location.  Caching can also be disabled by setting the variable to 0 or false.
2019-10-23 09:56:49 -07:00
Charles Lyding
358bc12856 feat(@angular-devkit/build-angular): support i18n localization for non-differential builds 2019-10-21 13:03:32 -07:00
Charles Lyding
e9279bbe1a fix(@angular-devkit/build-angular): update sourcemaps during localization 2019-10-21 13:03:32 -07:00
Charles Lyding
895fa620a2 feat(@angular-devkit/build-angular): support deprecated i18n options with new configuration 2019-10-21 13:03:32 -07:00
Charles Lyding
bc831e8ff5 feat(@angular-devkit/build-angular): support parallel i18n localization 2019-10-21 13:03:32 -07:00
Charles Lyding
cda57ae0e5 feat(@angular-devkit/build-angular): optimize i18n localize usage in source locale 2019-10-17 10:45:01 -07:00
Charles Lyding
9fca29a254 refactor(@angular-devkit/build-angular): use copy file utility in action cache 2019-10-17 10:45:01 -07:00
Charles Lyding
2b41cd1e81 feat(@angular-devkit/build-angular): initial support for i18n translation inlining 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
b3086ffd54 fix(@angular-devkit/build-angular): only copy assets outside of webpack when differential loading is needed in build builder
Fixes #15825
2019-10-14 13:42:29 -07:00
Filipe Silva
47490527ff feat(@angular-devkit/build-angular): add experimentalRollupPass (#15690)
In applications that make heavy use of lazy routes and ES2015 libraries, this option can improve bundle sizes. It might also break your bundles in ways we don't understand fully, so please test and report any problems you find.

NOTE: the following are known problems with experimentalRollupPass
- vendorChunk, commonChunk, namedChunks: these won't work, because by the time webpack sees the chunks, the context of where they came from is lost.
- webWorkerTsConfig: workers must be imported via a root relative path (e.g.`app/search/search.worker`) instead of a relative path (`/search.worker`) because of the same reason as above.
- loadChildren string syntax: doesn't work because rollup cannot follow the imports.
2019-10-10 12:39:38 -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
Charles
2dc885304b refactor(@angular-devkit/build-angular): reorganize bundle processing for browser builder (#15776) 2019-10-09 11:25:23 -07:00
Charles
3a44611483 refactor(@angular-devkit/build-angular): initial copy-on-write asset processing support (#15788)
This is currently only supported when performing a differential loading build (no watch mode).  This will eventually be expanded to cover watch mode and non-differential loading builds.
2019-10-09 11:07:31 -07:00
Charles Lyding
72d1bf3c52 refactor(@angular-devkit/build-angular): support reading i18n project options 2019-10-03 14:40:31 -07:00
Charles Lyding
1cefbc6974 refactor(@angular-devkit/build-angular): process bundle code quality improvements 2019-10-03 14:40:31 -07:00
TinyMan
c5869f57bc feat(@angular-devkit/build-angular): set document locale when using i18nLocale
Fixes #8102
2019-10-02 10:55:15 -07:00
Charles Lyding
190f80cf58 refactor(@angular-devkit/build-angular): optimize bundle process cache detection
This causes the cache checking to stop on the first miss since all required entries must be present for a bundle to be considered cached.
2019-09-27 14:41:08 -07:00