A simple gradle plugin to minify CSS and JavaScript files.
Uses Google Closure Compiler and custom Google Closure Stylesheets for minification.
plugins {
id("org.gradlewebtools.minify") version "<version>"
}
minification {
js { //this: JsMinifyTask
srcDir = project.file("js")
dstDir = project.file("build/js")
}
css { //this: CssMinifyTask
srcDir = project.file("css")
dstDir = project.file("build/css")
}
}If you need more than one minification task's you should add them manually. Therefore, this plugin provides the task
types JsMinifyTask and CssMinifyTask.
tasks.create<JsMinifyTask>("additionalJsMinify") { //this: JsMinifyTask
srcDir = project.file("js")
dstDir = project.file("build/js")
}task additionalJsMinify(type: org.gradlewebtools.minify.JsMinifyTask) {
srcDir = project.file("js")
dstDir = project.file("build/js")
}tasks.create<CssMinifyTask>("additionalCssMinify") { //this: CssMinifyTask
srcDir = project.file("css")
dstDir = project.file("build/css")
}task cssMinify(type: org.gradlewebtools.minify.CssMinifyTask) {
srcDir = project.file("css")
dstDir = project.file("build/css")
}Note: Enum properties must be specified by their fully qualified classname.
tasks.create<JsMinifyTask>("additionalJsMinify") { //this: JsMinifyTask
srcDir = project.file("js")
dstDir = project.file("build/js")
options {
ignoreMinFiles = false
compilationLevel = com.google.javascript.jscomp.CompilationLevel.SIMPLE_OPTIMIZATIONS
env = com.google.javascript.jscomp.CompilerOptions.Environment.BROWSER
languageIn = null
languageOut = null
warningLevel = com.google.javascript.jscomp.WarningLevel.QUIET
extraAnnotationNames = listOf()
strictModeInput = false
debug = false
exportLocalPropertyDefinitions = false
formatting = listOf()
generateExports = false
renamePrefixNamespace = null
renameVariablePrefix = null
moduleResolution = com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode.BROWSER
processCommonJsModules = false
packageJsonEntryNames = listOf()
angularPass = false
forceInjectLibrary = listOf()
polymerVersion = null
rewritePolyfills = false
charset = kotlin.textCharsets.UTF_8
checksOnly = false
browserFeaturesetYear = null
createSourceMaps = false
originalFileNames = false
copyOriginalFile = false
}
}task additionalJsMinify(type: org.gradlewebtools.minify.JsMinifyTask) {
srcDir = project.file("js")
dstDir = project.file("build/js")
options.ignoreMinFiles = false
options.compilationLevel = com.google.javascript.jscomp.CompilationLevel.SIMPLE_OPTIMIZATIONS
env = com.google.javascript.jscomp.CompilerOptions.Environment.BROWSER
options.languageIn = null
options.languageOut = null
warningLevel = com.google.javascript.jscomp.WarningLevel.QUIET
options.extraAnnotationNames = listOf()
options.strictModeInput = false
options.debug = false
options.exportLocalPropertyDefinitions = false
options.formatting = listOf()
options.generateExports = false
options.renamePrefixNamespace = null
options.renameVariablePrefix = null
moduleResolution = com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode.BROWSER
options.processCommonJsModules = false
options.packageJsonEntryNames = listOf()
options.angularPass = false
options.dartPass = false
options.forceInjectLibrary = listOf()
options.polymerVersion = null
options.rewritePolyfills = false
charset = kotlin.textCharsets.UTF_8
options.checksOnly = false
options.browserFeaturesetYear = null
options.createSourceMaps = false
options.originalFileNames = false
options.copyOriginalFile = false
}| option | effect | values | default |
|---|---|---|---|
| srcDir | Sets source directory | File? | null |
| dstDir | Sets destination directory | File? | null |
| options | Sets JS minifier options | js options | js options |
| option | effect | values | default | |
|---|---|---|---|---|
| ignoreMinFiles | ignore files named ".min." | true, false | false | |
| compilationLevel | Specifies the compilation level to use | com.google.javascript.jscomp.CompilationLevel | com.google.javascript.jscomp.CompilationLevel.SIMPLE_OPTIMIZATIONS | |
| env | Determines the set of builtin externs to load | com.google.javascript.jscomp.CompilerOptions.Environment | com.google.javascript.jscomp.CompilerOptions.Environment.BROWSER | |
| languageIn | Sets the language spec to which input sources should conform | com.google.javascript.jscomp.CompilerOptions.LanguageMode | ||
| languageOut | Sets the language spec to which output should conform | com.google.javascript.jscomp.CompilerOptions.LanguageMode | ||
| warningLevel | Specifies the warning level to use | com.google.javascript.jscomp.WarningLevel | com.google.javascript.jscomp.WarningLevel.QUIET | |
| extraAnnotationName | A whitelist of tag names in JSDoc | list of strings | null | |
| strictModeInput | Assume input sources are to run in strict mode. | true, false | false | |
| debug | Enable debugging options | true, false | false | |
| exportLocalPropertyDefinitions | Generates export code for local properties marked with @export | true, false | false | |
| formatting | Specifies which formatting options, if any, should be applied to the output JS | com.google.javascript.jscomp.CommandLineRunner.FormattingOption | null | |
| generateExports | Generates export code for those marked with @export | true, false | false | |
| renamePrefixNamespace | Specifies the name of an object that will be used to store all non-extern globals | string | null | |
| renameVariablePrefix | Specifies a prefix that will be prepended to all variables | string | null | |
| moduleResolution | Specifies how the compiler locates modules | com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode | com.google.javascript.jscomp.deps.ModuleLoader.ResolutionMode.BROWSER | |
| processCommonJsModules | Process CommonJS modules to a concatenable form | true, false | false | |
| packageJsonEntryNames | Ordered list of entries to look for in package.json files when processing modules with the NODE module resolution strategy | list of strings | ["browser", "module", "main"] | |
| angularPass | Generate $inject properties for AngularJS for functions annotated with @ngInject | true, false | false | |
| dartPass | Rewrite Dart Dev Compiler output to be compiler-friendly | true, false | false | |
| forceInjectLibrary | Force injection of named runtime libraries. The format is where is the name of a runtime library | base, es6_runtime, runtime_type_check | empty list | |
| polymerVersion | Which version of Polymer is being used | 1, 2 | null | |
| rewritePolyfills | Rewrite ES6 library calls to use polyfills provided by the compiler's runtime | true, false | false | |
| charset | Input and output charset for all files | java.nio.charset.Charset | By default, we accept UTF-8 as input and output US_ASCII | |
| checksOnly | Don't generate output. Run checks, but no optimization passes | true, false | false | |
| browserFeaturesetYear | Browser feature set year | 2012, 2019, 2020 | 0 | |
| emitUseStrict | Whether 'use strict' should be added to the file | true, false | true |
See Google Closure Compiler for more information
tasks.create<CssMinifyTask>("additionalCssMinify") { //this: CssMinifyTask
srcDir = project.file("css")
dstDir = project.file("build/css")
options {
ignoreMinFiles = false
inputOrientation = com.google.common.css.JobDescription.InputOrientation.LTR
outputOrientation = com.google.common.css.JobDescription.OutputOrientation.LTR
outputFormat = com.google.common.css.JobDescription.OutputFormat.COMPRESSED
copyrightNotice = null
trueConditionNames = listOf()
allowDefPropagation = true
allowUnrecognizedFunctions = true
allowedNonStandardFunctions = listOf()
allowedUnrecognizedProperties = listOf()
allowUnrecognizedProperties = true
vendor = null
allowKeyframes = true
allowWebkitKeyframes = true
processDependencies = true
excludedClassesFromRenaming = listOf()
simplifyCss = true
eliminateDeadStyles = false
cssRenamingPrefix = ""
preserveComments = false
outputRenamingMapFormat = com.google.common.css.OutputRenamingMapFormat.JSON
compileConstants = mapOf()
options.sourceMapLevel = com.google.common.css.JobDescription.SourceMapDetailLevel.DEFAULT
createSourceMaps = false
originalFileNames = false
copyOriginalFile = false
}
}task cssMinify(type: org.gradlewebtools.minify.CssMinifyTask) {
srcDir = project.file("css")
dstDir = project.file("build/css")
options.ignoreMinFiles = false
options.inputOrientation = InputOrientation.LTR
options.outputOrientation = OutputOrientation.LTR
outputFormat = com.google.common.css.JobDescription.OutputFormat.COMPRESSED
options.copyrightNotice = null
options.trueConditionNames = listOf()
options.allowDefPropagation = true
options.allowUnrecognizedFunctions = true
options.allowedNonStandardFunctions = listOf()
options.allowedUnrecognizedProperties = listOf()
options.allowUnrecognizedProperties = true
options.vendor = null
options.allowKeyframes = true
options.allowWebkitKeyframes = true
options.processDependencies = true
options.excludedClassesFromRenaming = listOf()
options.simplifyCss = true
options.eliminateDeadStyles = false
options.cssRenamingPrefix = ""
options.preserveComments = false
outputRenamingMapFormat = com.google.common.css.OutputRenamingMapFormat.JSON
options.compileConstants = mapOf()
options.sourceMapLevel = com.google.common.css.JobDescription.SourceMapDetailLevel.DEFAULT
options.createSourceMaps = false
options.originalFileNames = false
options.copyOriginalFile = false
}| option | effect | values | default |
|---|---|---|---|
| srcDir | Sets source directory | File? |
null |
| dstDir | Sets destination directory | File? |
null |
| options | Sets CSS minifier options | css options | css options |
| option | effect | values | default |
|---|---|---|---|
| ignoreMinFiles | ignore files named ".min." | true, false | false |
| inputOrientation | inputOrientation | com.google.common.css.JobDescription.InputOrientation | com.google.common.css.JobDescription.OutputOrientation.LTR |
| outputOrientation | outputOrientation | com.google.common.css.JobDescription.OutputOrientation | com.google.common.css.JobDescription.OutputOrientation.LTR |
| outputFormat | outputFormat | com.google.common.css.JobDescription.OutputFormat | com.google.common.css.JobDescription.OutputFormat.COMPRESSED |
| copyrightNotice | copyrightNotice | String | null |
| trueConditionNames | trueConditionNames | list of strings | empty list |
| allowDefPropagation | allowDefPropagation | true, false | true |
| allowUnrecognizedFunctions | allowUnrecognizedFunctions | true, false | true |
| allowedNonStandardFunctions | allowedNonStandardFunctions | list of strings | empty list |
| allowedUnrecognizedProperties | allowedUnrecognizedProperties | list of strings | empty list |
| allowUnrecognizedProperties | allowUnrecognizedProperties | true, false | true |
| vendor | vendor | com.google.common.css.Vendor | null |
| allowKeyframes | allowKeyframes | true, false | true |
| allowWebkitKeyframes | allowWebkitKeyframes | true, false | true |
| processDependencies | processDependencies | true, false | true |
| excludedClassesFromRenaming | excludedClassesFromRenaming | list of strings | empty list |
| simplifyCss | simplifyCss | true, false | true |
| eliminateDeadStyles | eliminateDeadStyles | true, false | false |
| cssRenamingPrefix | CSS renaming prefix | String | empty string |
| preserveComments | preserveComments | true, false | false |
| outputRenamingMapFormat | outputRenamingMapFormat | com.google.common.cssOutputRenamingMapFormat | com.google.common.cssOutputRenamingMapFormat.JSON |
| compileConstants | compileConstants | map | empty map |
| sourceMapLevel | sourceMapLevel | com.google.common.css.JobDescription.JobDescription.SourceMapDetailLevel | com.google.common.css.JobDescription.JobDescription.SourceMapDetailLevel.DEFAULT |