Aiming to be the simplest way to manage your Javascript in a build.
Wrangling your JS in a Gradle build is easy! Just add this to your build.gradle file:
// Pull the plugin from a Maven Repo
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.eriwen:gradle-js-plugin:1.1'
}
}
// Invoke the plugin
apply plugin: 'js'
// Declare your sources
javascript.source {
dev {
js {
srcDir jsSrcDir
include "*.js"
exclude "*.min.js"
}
}
prod {
js {
srcDir jsSrcDir
include "*.min.js"
}
}
}
// Specify a collection of files to be combined, then minified and finally GZip compressed.
task combinejs(type: com.eriwen.gradle.js.tasks.CombineJsTask) {
if (env == 'prod') {
source = javascript.source.dev.js.files
} else {
source = javascript.source.prod.js.files
}
dest = file("${buildDir}/all.js")
}
task minifyjs(type: com.eriwen.gradle.js.tasks.MinifyJsTask) {
source = combinejs
dest = file("${buildDir}/all-min.js")
closure {
warningLevel = 'QUIET'
}
}
task gzipjs(type: com.eriwen.gradle.js.tasks.GzipJsTask) {
source = minifyjs
dest = file("${buildDir}/all-min.js")
}
Need more than 1 set of files generated? We'll have to declare our tasks a bit differently:
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")
}
JSHint support
task jshintjs(type: com.eriwen.gradle.js.tasks.JsHintTask) {
source = javascript.source.dev.js.files
dest = file("${buildDir}/jshint.out")
}
JSDoc 3 support
task jsdocjs(type: com.eriwen.gradle.js.tasks.JsDocTask) {
source = ["${projectDir}/js/file1.js", "${projectDir}/js/file2.js"]
destinationDir = file("${buildDir}/jsdoc")
}
props2Js support
task processProps(type: com.eriwen.gradle.js.tasks.Props2JsTask) {
source = file("${projectDir}/src/test/resources/test.properties")
dest = file("${buildDir}/props.jsonp")
props {
type = 'jsonp'
functionName = 'fn'
}
}
- source = Collection of file paths of files to merge
- dest = File for combined output
minifyJs (Uses the Google Closure Compiler)
- source = File to minify
- dest = File for minified output
- (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
- source = File to compress
- dest = File for compressed output
- source = Files to assess with JSHint
- dest = File for JSHint output
- 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.
- 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
What, you want more? Tell me then!
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
When submitting your pull requests, please do the following to make it easier to incorporate your changes:
- Include unit and/or functional tests that validate changes you're making.
- Rebase your changes onto origin/HEAD if you can do so cleanly.
- If submitting additional functionality, provide an example of how to use it.
- Please keep code style consistent with surrounding code.
You can run all tests by simply running gradlew test
from your favorite shell.
The Gradle CSS Plugin!