Skip to content

elygre/gradle-js-plugin

 
 

Repository files navigation

Gradle Javascript Plugin! Build Status

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:

// 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.prod.js.files
    } else {
        source = javascript.source.dev.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'
    }
}

Available Tasks and Options

combineJs

  • 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

gzipJs

  • source = File to compress
  • dest = File for compressed output

jshint

  • source = Files to assess with JSHint
  • dest = File for JSHint output

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

What, you want more? Tell me then!

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

See Also

The Gradle CSS Plugin!

About

Gradle plugin for working with JS

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 69.2%
  • Groovy 26.3%
  • Shell 2.3%
  • Java 2.2%