From 6768cb8f0a88257742a4ceb16b2d3fb645242fd3 Mon Sep 17 00:00:00 2001 From: Filipe Silva Date: Thu, 26 Jul 2018 16:53:52 +0100 Subject: [PATCH] feat(@angular-devkit/build-angular): use terser instead of uglify-es --- package-lock.json | 139 ++++++++++++++++-- package.json | 3 +- .../angular_devkit/build_angular/package.json | 3 +- .../models/webpack-configs/common.ts | 24 ++- 4 files changed, 149 insertions(+), 20 deletions(-) diff --git a/package-lock.json b/package-lock.json index 1ad6b852dd9b..980d00f3444c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2290,7 +2290,7 @@ }, "compression": { "version": "1.7.2", - "resolved": "http://registry.npmjs.org/compression/-/compression-1.7.2.tgz", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz", "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=", "requires": { "accepts": "~1.3.4", @@ -7463,6 +7463,34 @@ "update-notifier": "^2.3.0" }, "dependencies": { + "autoprefixer": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.0.1.tgz", + "integrity": "sha512-ytUcgSKu1mZh8pCJq54BkaK7ijigK+nhqVmu8PYOR00letCkrU71qTfKnzhQgn7by/QJvlJGUAofMt+jyXJTxA==", + "requires": { + "browserslist": "^4.0.1", + "caniuse-lite": "^1.0.30000865", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.1", + "postcss-value-parser": "^3.2.3" + } + }, + "browserslist": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.0.1.tgz", + "integrity": "sha512-QqiiIWchEIkney3wY53/huI7ZErouNAdvOkjorUALAwRcu3tEwOV3Sh6He0DnP38mz1JjBpCBb50jQBmaYuHPw==", + "requires": { + "caniuse-lite": "^1.0.30000865", + "electron-to-chromium": "^1.3.52", + "node-releases": "^1.0.0-alpha.10" + } + }, + "caniuse-lite": { + "version": "1.0.30000865", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000865.tgz", + "integrity": "sha512-vs79o1mOSKRGv/1pSkp4EXgl4ZviWeYReXw60XfacPU64uQWZwJT6vZNmxRF9O+6zu71sJwMxLK5JXxbzuVrLw==" + }, "chalk": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.1.tgz", @@ -7473,6 +7501,59 @@ "supports-color": "^5.3.0" } }, + "electron-to-chromium": { + "version": "1.3.52", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.52.tgz", + "integrity": "sha1-0tnxJwuko7lnuDHEDvcftNmrXOA=" + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "requires": { + "locate-path": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.0.0.tgz", + "integrity": "sha512-fl5s52lI5ahKCernzzIyAP0QAZbGIovtVHGwpcu1Jr/EpzLVDI2myISHwGqK7m8uQFugVWSrbxH7XnhGtvEc+A==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz", + "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==" + }, + "postcss": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.1.tgz", + "integrity": "sha512-c6M68yZX0bWnZ0GcX8duWcfweGeGQvYgw6w4xksRePDmrpCrLMqneN07xwce17ACWBAr0S+DoI0T31axZ21TKg==", + "requires": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + } + }, "read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", @@ -7488,7 +7569,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", "requires": { - "find-up": "^2.0.0", + "find-up": "^3.0.0", "read-pkg": "^3.0.0" } }, @@ -7502,8 +7583,15 @@ "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.5.tgz", "integrity": "sha512-Fm52gLqJqFBnT+Sn411NPDnsgaWiYeRLw42x7Va/mS8TKgaepwoGY7JLXHSEef3d3PmdFXSz1Zx7KMLL89E2QA==", "requires": { - "commander": "~2.15.0", + "commander": "~2.16.0", "source-map": "~0.6.1" + }, + "dependencies": { + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" + } } } } @@ -8533,15 +8621,6 @@ } } }, - "postcss-clean": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/postcss-clean/-/postcss-clean-1.1.0.tgz", - "integrity": "sha512-83g3GqMbCM5NL6MlbbPLJ/m2NrUepBF44MoDk4Gt04QGXeXKh9+ilQa0DzLnYnvqYHQCw83nckuEzBFr2muwbg==", - "requires": { - "clean-css": "^4.x", - "postcss": "^6.x" - } - }, "postcss-import": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-11.1.0.tgz", @@ -10547,6 +10626,37 @@ "execa": "^0.7.0" } }, + "terser": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-3.8.1.tgz", + "integrity": "sha512-FRin3gKQ0vm0xPPLuxw1FqpVgv1b2pBpYCaFb5qe6A7sD749Fnq1VbDiX3CEFM0BV0fqDzFtBfgmxhxCdzKQIg==", + "requires": { + "commander": "~2.16.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.6" + }, + "dependencies": { + "commander": { + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.16.0.tgz", + "integrity": "sha512-sVXqklSaotK9at437sFlFpyOcJonxe0yST/AG9DkQKUdIE6IqGIMv4SfAQSKaJbSdVEJYItASCrBiVQHq1HQew==" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.6.tgz", + "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + } + } + }, "text-extensions": { "version": "1.7.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.7.0.tgz", @@ -10880,9 +10990,8 @@ "optional": true }, "uglifyjs-webpack-plugin": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.5.tgz", - "integrity": "sha512-hIQJ1yxAPhEA2yW/i7Fr+SXZVMp+VEI3d42RTHBgQd2yhp/1UdBcR3QEWPV5ahBxlqQDMEMTuTEvDHSFINfwSw==", + "version": "github:webpack-contrib/uglifyjs-webpack-plugin#583264da9a34452d30c49e36bb5b39497d0e8f16", + "from": "github:webpack-contrib/uglifyjs-webpack-plugin#583264da9a34452d30c49e36bb5b39497d0e8f16", "requires": { "cacache": "^10.0.4", "find-cache-dir": "^1.0.0", diff --git a/package.json b/package.json index b0c8502e8dbe..d90d91854c45 100644 --- a/package.json +++ b/package.json @@ -127,13 +127,14 @@ "stylus-loader": "^3.0.2", "symbol-observable": "^1.2.0", "temp": "^0.8.3", + "terser": "^3.8.1", "tree-kill": "^1.2.0", "ts-node": "^5.0.0", "tslint": "^5.9.1", "tslint-sonarts": "^1.7.0", "tsutils": "~2.22.2", "typescript": "~2.7.2", - "uglifyjs-webpack-plugin": "^1.2.5", + "uglifyjs-webpack-plugin": "github:webpack-contrib/uglifyjs-webpack-plugin#583264da9a34452d30c49e36bb5b39497d0e8f16", "url-loader": "^1.0.1", "webpack": "^4.15.1", "webpack-dev-middleware": "^3.1.3", diff --git a/packages/angular_devkit/build_angular/package.json b/packages/angular_devkit/build_angular/package.json index a7a2689661a7..6eb7b3c42b63 100644 --- a/packages/angular_devkit/build_angular/package.json +++ b/packages/angular_devkit/build_angular/package.json @@ -47,8 +47,9 @@ "style-loader": "^0.21.0", "stylus": "^0.54.5", "stylus-loader": "^3.0.2", + "terser": "^3.8.1", "tree-kill": "^1.2.0", - "uglifyjs-webpack-plugin": "^1.2.5", + "uglifyjs-webpack-plugin": "github:webpack-contrib/uglifyjs-webpack-plugin#583264da9a34452d30c49e36bb5b39497d0e8f16", "url-loader": "^1.0.1", "webpack": "^4.15.1", "webpack-dev-middleware": "^3.1.3", 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 6e371e825637..7db0e79ce2af 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 @@ -310,9 +310,27 @@ export function getCommonConfig(wco: WebpackConfigOptions) { }), new UglifyJSPlugin({ sourceMap: buildOptions.sourceMap, - parallel: true, - cache: true, - uglifyOptions, + // Parallelization turned off because it would required process communication to pass + // on the computed uglifyOptions. + parallel: false, + cacheKeys: (defaultCacheKeys: Object) => { + return Object.assign( + {}, + defaultCacheKeys, + { terser: require('terser/package.json').version }, + ); + }, + minify: (file: string, sourceMap: string) => { + const terserOptions: any = uglifyOptions; + + if (sourceMap) { + terserOptions.sourceMap = { + content: sourceMap, + }; + } + + return require('terser').minify(file, terserOptions); + } }), ], },