From b2e6c0e87f94d1fc46b8fafa69bd40e8d2ffe88f Mon Sep 17 00:00:00 2001 From: Nikolay Kim Date: Fri, 26 Aug 2016 15:20:46 +0300 Subject: [PATCH] Compression options for UglifyJS (#41) * Handle compression parameters for UglifyJS * Merge defaults into given object --- Gruntfile.js | 16 ++++++++++++ tasks/preload.js | 26 ++++++++++++++----- .../my/ui/lib/library-preload.json | 11 ++++++++ .../my/ui/lib/foo.properties | 1 + .../my/ui/lib/library.js | 8 ++++++ .../my/ui/lib/my.view.xml | 2 ++ .../my/ui/lib/myHtmlPre.view.xml | 3 +++ .../my/ui/lib/myJS.js | 23 ++++++++++++++++ .../my/ui/lib/myJSON.json | 3 +++ test/preload_test.js | 8 ++++++ 10 files changed, 94 insertions(+), 7 deletions(-) create mode 100644 test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js create mode 100644 test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json diff --git a/Gruntfile.js b/Gruntfile.js index 9711b557..2cb48a53 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -213,6 +213,22 @@ module.exports = function(grunt) { dest: 'test/preload/fixtures/library-same-dest' }, libraries: '**' + }, + + 'library_custom_uglify_params': { + options: { + resources: 'test/preload/fixtures/library-custom-uglify-params', + dest: 'tmp/preload/library_custom_uglify_params', + compress: { + uglifyjs: { + mangle: false, + output: { + ascii_only: true + } + } + } + }, + libraries: '**' } }, diff --git a/tasks/preload.js b/tasks/preload.js index 1cf30cd3..a9da8e31 100644 --- a/tasks/preload.js +++ b/tasks/preload.js @@ -207,16 +207,28 @@ module.exports = function (grunt) { iOriginalSize = fileContent.length; iPreloadOriginalSize += iOriginalSize; + // Convert default compression to empty configuration object + if (options.compress === true) { + options.compress = {}; + } + + // Make sure to have an object + options.compress.uglifyjs = options.compress.uglifyjs || {}; + + // Always override given options, override shouldn't be possible + options.compress.uglifyjs.fromString = true; + options.compress.uglifyjs.warnings = grunt.option('verbose') === true; + + // Set default "comments" option if not given already + options.compress.uglifyjs.output = options.compress.uglifyjs.output || {}; + if (!options.compress.uglifyjs.output.hasOwnProperty("comments")) { + options.compress.uglifyjs.output.comments = copyrightCommentsPattern; + } + switch (fileExtension) { case '.js': // Javascript files are processed by Uglify - fileContent = uglify.minify(fileContent, { - fromString: true, - warnings: grunt.option('verbose') === true, - output: { - comments: copyrightCommentsPattern - } - }).code; + fileContent = uglify.minify(fileContent, options.compress.uglifyjs).code; break; case '.json': // JSON is parsed and written to string again to remove unwanted white space diff --git a/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json b/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json new file mode 100644 index 00000000..9b1040d1 --- /dev/null +++ b/test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json @@ -0,0 +1,11 @@ +{ + "version": "2.0", + "name": "my.ui.lib.library-preload", + "modules": { + "my/ui/lib/library.js": "jQuery.sap.require(\"sap.ui.core.library\"),jQuery.sap.declare(\"my.ui.lib.library\"),sap.ui.getCore().initLibrary({name:\"my.ui.lib\",version:\"0.0.0\",dependencies:[\"sap.ui.core\"]});", + "my/ui/lib/myJS.js": "/* © */\n\"use strict\";function myFunction(longVariableName,longerVariableName){var sample=\"\\u518d\\u6309\\u4e00\\u6b21\\u9000\\u51fa\\u4f19\\u62fc\";return longVariableName+longerVariableName+sample}/**\n* This is a copyright comment\n*/\n/* (c) */\n/* released under */\n/* license */\nconsole.log(\"myJS\");", + "my/ui/lib/my.view.xml": "XML\n", + "my/ui/lib/myHtmlPre.view.xml": "XML\n\n ", + "my/ui/lib/foo.properties": "FOO=BAR\n" + } +} diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties new file mode 100644 index 00000000..6ac867af --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/foo.properties @@ -0,0 +1 @@ +FOO=BAR diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js new file mode 100644 index 00000000..ddc3b34c --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/library.js @@ -0,0 +1,8 @@ +jQuery.sap.require("sap.ui.core.library"); +jQuery.sap.declare("my.ui.lib.library"); + +sap.ui.getCore().initLibrary({ + name : "my.ui.lib", + version: "0.0.0", + dependencies : ["sap.ui.core"] +}); diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml new file mode 100644 index 00000000..ac389a3b --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/my.view.xml @@ -0,0 +1,2 @@ +XML + \ No newline at end of file diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml new file mode 100644 index 00000000..baa83f00 --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myHtmlPre.view.xml @@ -0,0 +1,3 @@ +XML + + \ No newline at end of file diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js new file mode 100644 index 00000000..eccd6606 --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJS.js @@ -0,0 +1,23 @@ +/* © */ +'use strict'; + +/** +* This is a copyright comment +*/ + +/* (c) */ + +/* released under */ +/* normal comment */ +/* license */ + + +console.log('myJS'); + +/** + * This is a little comment + */ +function myFunction(longVariableName, longerVariableName) { + var sample = '\u518d\u6309\u4e00\u6b21\u9000\u51fa\u4f19\u62fc'; + return longVariableName + longerVariableName + sample; +} diff --git a/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json new file mode 100644 index 00000000..bffd0ff5 --- /dev/null +++ b/test/preload/fixtures/library-custom-uglify-params/my/ui/lib/myJSON.json @@ -0,0 +1,3 @@ +{ + "my": "json" +} diff --git a/test/preload_test.js b/test/preload_test.js index 4f541ad1..5fd47517 100644 --- a/test/preload_test.js +++ b/test/preload_test.js @@ -45,6 +45,14 @@ describe('openui5_preload', function() { }); }); + it('custom_uglify_params', function() { + fileContent.equal({ + sActualFileSource: 'tmp/preload/library_custom_uglify_params/my/ui/lib/library-preload.json', + sExpectedFileSource: 'test/preload/expected/library_custom_uglify_params/my/ui/lib/library-preload.json', + sMessage: 'library preload JSON should be correctly created.' + }); + }) + it('library_same_dest', function() { fileContent.equal({ sActualFileSource: 'test/preload/fixtures/library-same-dest/my/ui/lib/library-preload.json',