Aiming to be the simplest way to manage your JavaScript in a build.
Quick Start
Wrangling your JS in a Gradle build is easy! Just add this to your build.gradle file:
Gradle 2.1+
plugins {
id "com.eriwen.gradle.js" version "1.12.1"
}
Gradle 2.0-
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "com.eriwen:gradle-js-plugin:1.12.1"
}
}
apply plugin: "com.eriwen.gradle.js"
// Declare your sources
javascript.source {
dev {
js {
srcDir jsSrcDir
include "*.js"
exclude "*.min.js"
}
}
prod {
js {
srcDir jsSrcDir
include "*.min.js"
}
}
}
options)
Combining Files (// Configure the built-in task
combineJs {
encoding = "UTF-8"
source = javascript.source.dev.js.files
dest = file("${buildDir}/all.js")
}
// Create new CombineJsTasks if you have multiple sets of JS files
task jsDev(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
dest = file("${buildDir}/all-debug.js")
}
task jsProd(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
dest = file("${buildDir}/all.js")
}
Google Closure Compiler (options)
Minifying files withminifyJs {
source = combineJs
dest = file("${buildDir}/all-min.js")
sourceMap = file("${buildDir}/all.sourcemap.json")
closure {
warningLevel = 'QUIET'
}
}
options)
GZip JS (gzipJs {
source = minifyjs
dest = file("${buildDir}/all-min.js")
}
JSHint support (options)
jshint {
source = javascript.source.dev.js.files
dest = file("${buildDir}/jshint.out")
reporter = 'checkstyle'
jshint.options = [expr: "true", unused: "true"]
}
JSDoc 3 support (options)
jsdoc {
source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
destinationDir = file("${buildDir}/jsdoc")
}
props2js support (options)
props2js {
source = file("${projectDir}/src/test/resources/test.properties")
dest = file("${buildDir}/props.jsonp")
props {
type = 'jsonp'
functionName = 'fn'
}
}
require.js via r.js (options)
requireJs {
source = javascript.source.dev.js.files
dest = file("${buildDir}/out.js")
requirejs.buildprofile = new File("src/main/resources/requirejs-config.js")
}
Built-in Tasks and Options
combineJs
- source = Collection of file paths of files to merge
- dest = File for combined output
Google Closure Compiler)
minifyJs (Uses the- source = File to minify
- dest = File for minified output
- (Optional) sourcemap = Source map file
- (Optional) closure.compilationLevel = 'WHITESPACE_ONLY', 'SIMPLE_OPTIMIZATIONS' (default), or 'ADVANCED_OPTIMIZATIONS' (are you hardcore?)
- (Optional) closure.warningLevel = 'QUIET', 'DEFAULT' (default), or 'VERBOSE'
- (Optional) closure.compilerOptions = CompilerOptions object
- (Optional) closure.externs = FileCollection object
gzipJs
- source = File to compress
- dest = File for compressed output
jshint
- source = Files to assess with JSHint
- dest = File for JSHint output
- (Optional) reporter = Only 'checkstyle' supported right now. Defaults to plain JSHint output.
- (Optional) ignoreExitCode = Fail build if
false
and jshint finds problems. Default istrue
. - (Optional) outputToStdOut =
true
will output to STDOUT instead of file. Default isfalse
. - (Optional) jshint.options = Map of options (e.g.
[expr: "true", unused: "true"]
) - (Optional) jshint.predef = Map of predefined globals so JSHint doesn't complain about them
jsdoc
- source = Files to generate documentation for
- destinationDir = Directory path to put JSDoc output
- (Optional) options.options = []
JSDoc 3 options:
-t or --template <value> The name of the template to use. Default: the "default" template
-c or --configure <value> The path to the configuration file. Default: jsdoc __dirname + /conf.json
-e or --encoding <value> Assume this encoding when reading all source files. Default: utf-8
-T or --test Run all tests and quit.
-d or --destination <value> The path to the output folder. Use "console" to dump data to the console. Default: console
-p or --private Display symbols marked with the @private tag. Default: false.
-r or --recurse Recurse into subdirectories when scanning for source code files.
-h or --help Print this message and quit.
-X or --explain Dump all found doclet internals to console and quit.
-q or --query <value> Provide a querystring to define custom variable names/values to add to the options hash.
-u or --tutorials <value> Directory in which JSDoc should search for tutorials.
props2js
- source = Properties file to process
- dest = Destination file for output
- props.type = One of: 'js', 'json', or 'jsonp'
- (Optional) props.functionName = Function name to wrap JSONP
requireJs
- source = Source JS files
- dest = Output JS file
- (Must declare this or
requirejs.options
) requirejs.buildprofile = File reference for config example - requirejs.options = Map of options require.js docs
- (Optional) ignoreExitCode = Fail build if
false
and require.js did not run successfully. Default isfalse
. - (Optional) requirejs.impl = r.js implementation file. Version 2.1.8 is provided within this plugin. Specifying this option allows users to specify a version of the require optimizer of their own choosing
What, you want more? Tell me!
Contributors
This project is made possible due to the efforts of these fine people:
- Eric Wendelin - Original author and maintainer
- Luke Daley - Advice and improved project structure and testing
- Josh Newman - AMD and CommonJS work
- Martin Ziel - Allowing minifyJs task to accept multiple files as input
- Joe Fitzgerald - JSHint and RequireJS features
- levsa - JSHint predef and checkstyle reporter
- Martin Snyder - requireJs impl option
- Aaron Arnett - Remove explicit MavenCentral dependency
- sv99 - Improve Gradle version compatibility
See Also
The Gradle CSS Plugin!