diff --git a/plugin.gradle b/plugin.gradle index d5f206c..81939bf 100644 --- a/plugin.gradle +++ b/plugin.gradle @@ -20,7 +20,7 @@ javascript { custom { js { srcDir "src/test/resources" - include "*.js" + include "file*.js" } } } @@ -39,6 +39,7 @@ task minify(type: com.eriwen.gradle.js.tasks.MinifyJsTask) { closure { warningLevel = 'VERBOSE' compilationLevel = 'SIMPLE_OPTIMIZATIONS' + externs = files("src/test/resources/externs.js") } } diff --git a/src/main/groovy/com/eriwen/gradle/js/ClosureCompilerExtension.groovy b/src/main/groovy/com/eriwen/gradle/js/ClosureCompilerExtension.groovy index 08d482d..645bacf 100644 --- a/src/main/groovy/com/eriwen/gradle/js/ClosureCompilerExtension.groovy +++ b/src/main/groovy/com/eriwen/gradle/js/ClosureCompilerExtension.groovy @@ -16,10 +16,12 @@ package com.eriwen.gradle.js import com.google.javascript.jscomp.CompilerOptions +import org.gradle.api.file.FileCollection class ClosureCompilerExtension { public static final NAME = "closure" CompilerOptions compilerOptions = new CompilerOptions() String compilationLevel = 'SIMPLE_OPTIMIZATIONS' String warningLevel = 'DEFAULT' + FileCollection externs = null } diff --git a/src/main/groovy/com/eriwen/gradle/js/JsMinifier.groovy b/src/main/groovy/com/eriwen/gradle/js/JsMinifier.groovy index 01a45aa..d7ade3e 100644 --- a/src/main/groovy/com/eriwen/gradle/js/JsMinifier.groovy +++ b/src/main/groovy/com/eriwen/gradle/js/JsMinifier.groovy @@ -7,6 +7,8 @@ import com.google.javascript.jscomp.CompilerOptions import com.google.javascript.jscomp.JSSourceFile import com.google.javascript.jscomp.Result import com.google.javascript.jscomp.WarningLevel +import java.nio.charset.Charset +import org.gradle.api.file.FileCollection /** * Util to minify JS files with Google Closure Compiler. @@ -16,23 +18,25 @@ import com.google.javascript.jscomp.WarningLevel */ class JsMinifier { - - void minifyJsFile(final File inputFile, final File outputFile, final CompilerOptions options, + void minifyJsFile(final File inputFile, final Set externsFiles, final File outputFile, final CompilerOptions options, final String warningLevel, final String compilationLevel) { - Compiler compiler = new Compiler() - CompilationLevel.valueOf(compilationLevel).setOptionsForCompilationLevel(options) - WarningLevel level = WarningLevel.valueOf(warningLevel) - level.setOptionsForWarningLevel(options) - List externs = CommandLineRunner.getDefaultExterns() + Compiler compiler = new Compiler() + CompilationLevel.valueOf(compilationLevel).setOptionsForCompilationLevel(options) + WarningLevel level = WarningLevel.valueOf(warningLevel) + level.setOptionsForWarningLevel(options) + List externs = CommandLineRunner.getDefaultExterns() + if (externsFiles.size()) { + externs.addAll(externsFiles.collect() { JSSourceFile.fromFile(it) }) + } List inputs = new ArrayList() inputs.add(JSSourceFile.fromFile(inputFile)) - Result result = compiler.compile(externs, inputs, options) - if (result.success) { - outputFile.write(compiler.toSource()) - } else { - result.errors.each { - println "${it.sourceName}:${it.lineNumber} - ${it.description}" - } - } + Result result = compiler.compile(externs, inputs, options) + if (result.success) { + outputFile.write(compiler.toSource()) + } else { + result.errors.each { + println "${it.sourceName}:${it.lineNumber} - ${it.description}" + } + } } } diff --git a/src/main/groovy/com/eriwen/gradle/js/tasks/MinifyJsTask.groovy b/src/main/groovy/com/eriwen/gradle/js/tasks/MinifyJsTask.groovy index 03faed6..1f75b29 100644 --- a/src/main/groovy/com/eriwen/gradle/js/tasks/MinifyJsTask.groovy +++ b/src/main/groovy/com/eriwen/gradle/js/tasks/MinifyJsTask.groovy @@ -34,6 +34,8 @@ class MinifyJsTask extends SourceTask { throw new GradleException("Only 1 file can be minified. Please run MinifyJs for each file.") } - MINIFIER.minifyJsFile((source.files.toArray() as File[])[0], dest, project.closure.compilerOptions, project.closure.warningLevel, project.closure.compilationLevel) + Set externsFiles = project.closure.externs ? project.closure.externs.files : [] as Set + MINIFIER.minifyJsFile((source.files.toArray() as File[])[0], externsFiles, dest, + project.closure.compilerOptions, project.closure.warningLevel, project.closure.compilationLevel) } } diff --git a/src/test/resources/externs.js b/src/test/resources/externs.js new file mode 100644 index 0000000..95d5d85 --- /dev/null +++ b/src/test/resources/externs.js @@ -0,0 +1 @@ +var console = {}; diff --git a/src/test/resources/file1.js b/src/test/resources/file1.js index 6f75907..c105981 100644 --- a/src/test/resources/file1.js +++ b/src/test/resources/file1.js @@ -5,4 +5,4 @@ function test1() { console.log('test1'); return true; -} \ No newline at end of file +}