From 0a337ef9ce45af3406811c2d751dfb97d98258f8 Mon Sep 17 00:00:00 2001 From: Jason Miller Date: Fri, 12 Oct 2018 16:29:30 -0400 Subject: [PATCH] feat(@ngtools/webpack): Automatically bundle module workers. Supports new Worker(...,{type:module}) using github.com/googlechromelabs/worker-plugin --- packages/angular/cli/lib/config/schema.json | 5 +++++ packages/angular_devkit/build_angular/package.json | 11 ++++++----- .../src/angular-cli-files/models/build-options.ts | 1 + .../models/webpack-configs/common.ts | 6 ++++++ 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/packages/angular/cli/lib/config/schema.json b/packages/angular/cli/lib/config/schema.json index ba1c6a7b66e6..4e3b4a911493 100644 --- a/packages/angular/cli/lib/config/schema.json +++ b/packages/angular/cli/lib/config/schema.json @@ -752,6 +752,11 @@ "description": "Generates a service worker config for production builds.", "default": false }, + "autoBundleWorkerModules": { + "type": "boolean", + "description": "Automatically bundle new Worker('..', { type:'module' })", + "default": true + }, "skipAppShell": { "type": "boolean", "description": "Flag to prevent building an app shell.", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index 5757aeeaf178..cc8954bfc463 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -27,8 +27,8 @@ "loader-utils": "1.1.0", "mini-css-extract-plugin": "0.4.3", "minimatch": "3.0.4", - "parse5": "4.0.0", "opn": "5.3.0", + "parse5": "4.0.0", "portfinder": "1.0.17", "postcss": "6.0.23", "postcss-import": "11.1.0", @@ -37,21 +37,22 @@ "rxjs": "6.3.3", "sass-loader": "7.1.0", "semver": "5.5.1", - "source-map-support": "0.5.9", "source-map-loader": "0.2.4", + "source-map-support": "0.5.9", "speed-measure-webpack-plugin": "^1.2.3", "stats-webpack-plugin": "0.7.0", "style-loader": "0.23.0", "stylus": "0.54.5", "stylus-loader": "3.0.2", - "tree-kill": "1.2.0", "terser-webpack-plugin": "1.1.0", + "tree-kill": "1.2.0", "webpack": "4.19.1", "webpack-dev-middleware": "3.3.0", "webpack-dev-server": "3.1.8", "webpack-merge": "4.1.4", "webpack-sources": "1.2.0", - "webpack-subresource-integrity": "1.1.0-rc.6" + "webpack-subresource-integrity": "1.1.0-rc.6", + "worker-plugin": "^1.1.1" }, "optionalDependencies": { "node-sass": "4.9.3" @@ -87,4 +88,4 @@ "protractor": "~5.4.0", "zone.js": "^0.8.19" } -} \ No newline at end of file +} diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/models/build-options.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/models/build-options.ts index 5a33f1e32913..36f2b74b717d 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/models/build-options.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/models/build-options.ts @@ -49,6 +49,7 @@ export interface BuildOptions { namedChunks?: boolean; subresourceIntegrity?: boolean; serviceWorker?: boolean; + autoBundleWorkerModules?: boolean; skipAppShell?: boolean; statsJson: boolean; forkTypeChecker: boolean; diff --git a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts index 803b5f3a78b6..9be57a1a26b5 100644 --- a/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts +++ b/packages/angular_devkit/build_angular/src/angular-cli-files/models/webpack-configs/common.ts @@ -26,6 +26,7 @@ const ProgressPlugin = require('webpack/lib/ProgressPlugin'); const CircularDependencyPlugin = require('circular-dependency-plugin'); const TerserPlugin = require('terser-webpack-plugin'); const StatsPlugin = require('stats-webpack-plugin'); +const WorkerPlugin = require('worker-plugin'); /** * Enumerate loaders and their dependencies from this file to let the dependency validator @@ -120,6 +121,11 @@ export function getCommonConfig(wco: WebpackConfigOptions) { }); } + if (buildOptions.autoBundleWorkerModules) { + const workerPluginInstance = new WorkerPlugin(); + extraPlugins.push(workerPluginInstance); + } + // process asset entries if (buildOptions.assets) { const copyWebpackPluginPatterns = buildOptions.assets.map((asset: AssetPatternObject) => {