From 95ea5361c73292187e48526f97a962cae3e3d2f3 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 11:49:01 +0100 Subject: [PATCH 01/11] uglify-es --- package.json | 2 +- src/transforms/uglify.js | 4 ++-- yarn.lock | 14 +++++++------- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index b2e9afc4258..a3e6cc0d04d 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,7 @@ "posthtml": "^0.9.2", "resolve": "^1.4.0", "serve-static": "^1.12.4", - "uglify-js": "^3.0.28", + "uglify-es": "^3.2.1", "v8-compile-cache": "^1.1.0", "worker-farm": "^1.4.1", "ws": "^3.1.0" diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index c32187aa865..76635124285 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,4 +1,4 @@ -const {AST_Node, minify} = require('uglify-js'); +const {AST_Node, minify} = require('uglify-es'); const {toEstree} = require('babel-to-estree'); const types = require('babel-types'); const walk = require('babylon-walk'); @@ -6,7 +6,7 @@ const walk = require('babylon-walk'); module.exports = async function(asset) { await asset.parseIfNeeded(); - // Convert to UglifyJS AST + // Convert to UglifyES AST var ast = AST_Node.from_mozilla_ast(toEstree(asset.ast, asset.contents)); var result = minify(ast, { toplevel: true diff --git a/yarn.lock b/yarn.lock index 782d0b2ecb1..720938526b2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4883,6 +4883,13 @@ typescript@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.6.2.tgz#3c5b6fd7f6de0914269027f03c0946758f7673a4" +uglify-es@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.2.1.tgz#93de0aad8a1bb629c8a316f686351bc4d6ece687" + dependencies: + commander "~2.12.1" + source-map "~0.6.1" + uglify-js@^2.6, uglify-js@^2.8.29: version "2.8.29" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" @@ -4892,13 +4899,6 @@ uglify-js@^2.6, uglify-js@^2.8.29: optionalDependencies: uglify-to-browserify "~1.0.0" -uglify-js@^3.0.28: - version "3.2.1" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.2.1.tgz#d6427fd45a25fefc5d196689c0c772a6915e10fe" - dependencies: - commander "~2.12.1" - source-map "~0.6.1" - uglify-to-browserify@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" From f16cb5792dc463d375193e81259bcb239ab67be1 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 12:01:17 +0100 Subject: [PATCH 02/11] fix error handling --- src/transforms/uglify.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 76635124285..8d28eb92575 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -12,6 +12,8 @@ module.exports = async function(asset) { toplevel: true }); + if (result.error) throw result.error; + // Uglify did our code generation for us, so remove the old AST asset.ast = null; asset.outputCode = result.code; From 1375ae2e117c121a5a54e185d7993c1e73fe8312 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 19:43:25 +0100 Subject: [PATCH 03/11] dump estree, enables ES6+ support --- package.json | 1 - src/transforms/uglify.js | 6 ++---- yarn.lock | 14 +++----------- 3 files changed, 5 insertions(+), 16 deletions(-) diff --git a/package.json b/package.json index a3e6cc0d04d..1e6ebe68fd2 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,6 @@ "babel-core": "^6.25.0", "babel-generator": "^6.25.0", "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", - "babel-to-estree": "^0.0.2", "babylon": "^6.17.4", "babylon-walk": "^1.0.2", "browser-resolve": "^1.11.2", diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 8d28eb92575..9e661f17a69 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,5 +1,4 @@ -const {AST_Node, minify} = require('uglify-es'); -const {toEstree} = require('babel-to-estree'); +const {minify} = require('uglify-es'); const types = require('babel-types'); const walk = require('babylon-walk'); @@ -7,8 +6,7 @@ module.exports = async function(asset) { await asset.parseIfNeeded(); // Convert to UglifyES AST - var ast = AST_Node.from_mozilla_ast(toEstree(asset.ast, asset.contents)); - var result = minify(ast, { + var result = minify(asset.generate().js, { toplevel: true }); diff --git a/yarn.lock b/yarn.lock index 720938526b2..26a1635fefd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -673,15 +673,7 @@ babel-template@^6.16.0, babel-template@^6.24.1, babel-template@^6.26.0: babylon "^6.18.0" lodash "^4.17.4" -babel-to-estree@^0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/babel-to-estree/-/babel-to-estree-0.0.2.tgz#505bc2bda6d962a9fbaf58e8aa06c6aed73497d0" - dependencies: - babel-traverse "^6.23.1" - babel-types "^6.23.0" - babylon "^6.16.1" - -babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-traverse@^6.26.0: +babel-traverse@^6.18.0, babel-traverse@^6.24.1, babel-traverse@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" dependencies: @@ -695,7 +687,7 @@ babel-traverse@^6.18.0, babel-traverse@^6.23.1, babel-traverse@^6.24.1, babel-tr invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1, babel-types@^6.26.0: +babel-types@^6.15.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.24.1, babel-types@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" dependencies: @@ -712,7 +704,7 @@ babylon-walk@^1.0.2: babel-types "^6.15.0" lodash.clone "^4.5.0" -babylon@^6.16.1, babylon@^6.17.4, babylon@^6.18.0: +babylon@^6.17.4, babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" From b0d534875671b5135b612c37ac213ce0833f28ad Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 19:44:57 +0100 Subject: [PATCH 04/11] fix comment --- src/transforms/uglify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 9e661f17a69..3a2e659a13b 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -5,7 +5,7 @@ const walk = require('babylon-walk'); module.exports = async function(asset) { await asset.parseIfNeeded(); - // Convert to UglifyES AST + // Minify with UglifyES var result = minify(asset.generate().js, { toplevel: true }); From 76e243c867f151f38b23027f518c41924e3c32c2 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 19:55:40 +0100 Subject: [PATCH 05/11] change comment to match npm package name --- src/transforms/uglify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 3a2e659a13b..f5044dcf510 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -5,7 +5,7 @@ const walk = require('babylon-walk'); module.exports = async function(asset) { await asset.parseIfNeeded(); - // Minify with UglifyES + // Minify with uglify-es var result = minify(asset.generate().js, { toplevel: true }); From 959d2f6d7e349a6a800987e413164d47472af1e4 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sat, 9 Dec 2017 19:57:42 +0100 Subject: [PATCH 06/11] remove useless comment --- src/transforms/uglify.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index f5044dcf510..116c389dd3f 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -5,8 +5,7 @@ const walk = require('babylon-walk'); module.exports = async function(asset) { await asset.parseIfNeeded(); - // Minify with uglify-es - var result = minify(asset.generate().js, { + let result = minify(asset.generate().js, { toplevel: true }); From 9d59def0c4a36d1dfd3722cc7cc14fa15d033f17 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sun, 10 Dec 2017 23:15:32 +0100 Subject: [PATCH 07/11] remove unused imports, change asset.generate to babel generate --- src/transforms/uglify.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 116c389dd3f..7014e8d36f8 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,11 +1,15 @@ const {minify} = require('uglify-es'); -const types = require('babel-types'); -const walk = require('babylon-walk'); +const generate = require('babel-generator').default; module.exports = async function(asset) { await asset.parseIfNeeded(); - let result = minify(asset.generate().js, { + // Convert AST into JS + let code = asset.isAstDirty + ? generate(asset.ast).code + : asset.outputCode || asset.contents; + + let result = minify(code, { toplevel: true }); From e85f8bef0e926c6255262d686a7c49b5a0b3a25e Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Sun, 10 Dec 2017 23:41:08 +0100 Subject: [PATCH 08/11] improve minify options --- src/transforms/uglify.js | 23 ++++++++++++++++++++--- test/javascript.js | 10 ++++++---- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 7014e8d36f8..89f79836bba 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,5 +1,6 @@ const {minify} = require('uglify-es'); const generate = require('babel-generator').default; +const Logger = require('../Logger'); module.exports = async function(asset) { await asset.parseIfNeeded(); @@ -9,12 +10,28 @@ module.exports = async function(asset) { ? generate(asset.ast).code : asset.outputCode || asset.contents; - let result = minify(code, { - toplevel: true - }); + let options = { + warnings: true, + mangle: { + toplevel: true + }, + compress: { + drop_console: true + } + }; + + let result = minify(code, options); if (result.error) throw result.error; + // Log all warnings + if (result.warnings) { + result.warnings.forEach(warning => { + // TODO: warn this using the logger + console.log(warning); + }); + } + // Uglify did our code generation for us, so remove the old AST asset.ast = null; asset.outputCode = result.code; diff --git a/test/javascript.js b/test/javascript.js index c17f3962dd5..c12a6864a1e 100644 --- a/test/javascript.js +++ b/test/javascript.js @@ -63,10 +63,12 @@ describe('javascript', function() { assertBundleTree(b, { name: 'index.js', assets: ['index.js', 'bundle-loader.js', 'bundle-url.js'], - childBundles: [{ - assets: ['local.js'], - childBundles: [] - }] + childBundles: [ + { + assets: ['local.js'], + childBundles: [] + } + ] }); let output = run(b).default; From a4cce8186b6e2ba87f1449be2e3b407921d24d2f Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Mon, 11 Dec 2017 00:13:55 +0100 Subject: [PATCH 09/11] fix comment --- src/transforms/uglify.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 89f79836bba..9974f9d902a 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -32,7 +32,7 @@ module.exports = async function(asset) { }); } - // Uglify did our code generation for us, so remove the old AST + // babel-generator did our code generation for us, so remove the old AST asset.ast = null; asset.outputCode = result.code; asset.isAstDirty = false; From 09d19ff1d61c86e405b87a8ca8f657a6616120c2 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Mon, 11 Dec 2017 00:15:22 +0100 Subject: [PATCH 10/11] remove unused import --- src/transforms/uglify.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 9974f9d902a..0040e4b3590 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,6 +1,5 @@ const {minify} = require('uglify-es'); const generate = require('babel-generator').default; -const Logger = require('../Logger'); module.exports = async function(asset) { await asset.parseIfNeeded(); From a4bafd42402a01cddf5edcc07227aede96f43242 Mon Sep 17 00:00:00 2001 From: Jasper De Moor Date: Mon, 11 Dec 2017 10:21:27 +0100 Subject: [PATCH 11/11] pivot back to asset.generate().js --- src/transforms/uglify.js | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/transforms/uglify.js b/src/transforms/uglify.js index 0040e4b3590..bbd15dfaa5d 100644 --- a/src/transforms/uglify.js +++ b/src/transforms/uglify.js @@ -1,13 +1,10 @@ const {minify} = require('uglify-es'); -const generate = require('babel-generator').default; module.exports = async function(asset) { await asset.parseIfNeeded(); // Convert AST into JS - let code = asset.isAstDirty - ? generate(asset.ast).code - : asset.outputCode || asset.contents; + let code = asset.generate().js; let options = { warnings: true,