grunt-closure-coffee-stack
Version:
Everything you need for Google Closure. Precise configuration, Soy templates, localization, TDD stack, and even CoffeeScript support. File watcher included.
301 lines (291 loc) • 19.3 kB
JavaScript
/*
* grunt-este
* https://github.com/este/grunt-este
*
* esteCompiler:
* options:
* compilerPath: 'bower_components/closure-compiler/compiler.jar'
* client:
* options:
* js_output_file: 'test_compiled.js'
* js: 'test.js'
* warning_level: 'VERBOSE'
* compilation_level: 'ADVANCED_OPTIMIZATIONS'
*
* Copyright (c) 2013 Daniel Steigerwald
*/
module.exports = function (grunt) {
grunt.registerMultiTask('compiler', 'Simple Google Closure Compiler wrapper',
function () {
var options = this.options({
compilerPath: './bower_components/closure-compiler/compiler.jar',
js_output_file: './test_compiled.js',
warning_level: 'VERBOSE'
// All available options are at the end of the page.
});
var args = ['-jar', options.compilerPath];
delete options.compilerPath;
for (var option in options) {
value = options[option];
if (value === true) {
args.push('--' + option);
continue;
}
if (!Array.isArray(value)) value = [value];
for (var i = 0; i < value.length; i++)
args.push('--' + option + '=' + value[i]);
}
this.filesSrc.forEach(function(src) {
args.push('--js=' + src);
});
var done = this.async();
var onSpawnDone = function(error, result, code) {
if (error) {
grunt.log.error(error);
done(false);
}
else {
if (options.js_output_file) {
grunt.log.writeln('File ' + options.js_output_file + ' created.');
}
done();
}
};
grunt.util.spawn({
cmd: 'java',
args: args
}, onSpawnDone);
}
);
};
// --accept_const_keyword : Allows usage of const keyword.
// --charset VAL : Input and output charset for all
// files. By default, we accept UTF-8 as
// input and output US_ASCII
// --closure_entry_point VAL : Entry points to the program. Must be
// goog.provide'd symbols. Any goog.provi
// de'd symbols that are not a transitive
// dependency of the entry points will
// be removed. Files without goog.provide
// s, and their dependencies, will
// always be left in. If any entry
// points are specified, then the
// manage_closure_dependencies option
// will be set to true and all files
// will be sorted in dependency order.
// --common_js_entry_module VAL : Root of your common JS dependency
// hierarchy. Your main script.
// --common_js_module_path_prefix VAL : Path prefix to be removed from
// CommonJS module names.
// --compilation_level [WHITESPACE_ONLY : Specifies the compilation level to
// | SIMPLE_OPTIMIZATIONS | ADVANCED_OPTI : use. Options: WHITESPACE_ONLY,
// MIZATIONS] : SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZ
// ATIONS
// --create_name_map_files : If true, variable renaming and
// property renaming map files will be
// produced as {binary name}_vars_map.out
// and {binary name}_props_map.out. Note
// that this flag cannot be used in
// conjunction with either variable_map_o
// utput_file or property_map_output_file
// --create_source_map VAL : If specified, a source map file
// mapping the generated source files
// back to the original source file will
// be output to the specified path. The
// %outname% placeholder will expand to
// the name of the output file that the
// source map corresponds to.
// --debug : Enable debugging options
// --define (--D, -D) VAL : Override the value of a variable
// annotated @define. The format is
// <name>[=<val>], where <name> is the
// name of a @define variable and <val>
// is a boolean, number, or a single-quot
// ed string that contains no single
// quotes. If [=<val>] is omitted, the
// variable is marked true
// --externs VAL : The file containing JavaScript
// externs. You may specify multiple
// --flagfile VAL : A file containing additional command-l
// ine options.
// --formatting [PRETTY_PRINT | PRINT_INP : Specifies which formatting options,
// UT_DELIMITER | SINGLE_QUOTES] : if any, should be applied to the
// output JS. Options: PRETTY_PRINT,
// PRINT_INPUT_DELIMITER, SINGLE_QUOTES
// --generate_exports : Generates export code for those
// marked with @export
// --help : Displays this message
// --js VAL : The JavaScript filename. You may
// specify multiple
// --js_output_file VAL : Primary output filename. If not
// specified, output is written to stdout
// --jscomp_error VAL : Make the named class of warnings an
// error. Options:accessControls,
// ambiguousFunctionDecl, cast, checkRegE
// xp, checkTypes, checkVars, const,
// constantProperty, deprecated,
// duplicateMessage, es5Strict, externsVa
// lidation, fileoverviewTags, globalThis
// , internetExplorerChecks, invalidCasts
// , misplacedTypeAnnotation, missingProp
// erties, nonStandardJsDocs, suspiciousC
// ode, strictModuleDepCheck, typeInvalid
// ation, undefinedNames, undefinedVars,
// unknownDefines, uselessCode, visibilit
// y
// --jscomp_off VAL : Turn off the named class of warnings.
// Options:accessControls, ambiguousFunct
// ionDecl, cast, checkRegExp, checkTypes
// , checkVars, const, constantProperty,
// deprecated, duplicateMessage,
// es5Strict, externsValidation,
// fileoverviewTags, globalThis,
// internetExplorerChecks, invalidCasts,
// misplacedTypeAnnotation, missingProper
// ties, nonStandardJsDocs, suspiciousCod
// e, strictModuleDepCheck, typeInvalidat
// ion, undefinedNames, undefinedVars,
// unknownDefines, uselessCode, visibilit
// y
// --jscomp_warning VAL : Make the named class of warnings a
// normal warning. Options:accessControls
// , ambiguousFunctionDecl, cast,
// checkRegExp, checkTypes, checkVars,
// const, constantProperty, deprecated,
// duplicateMessage, es5Strict, externsVa
// lidation, fileoverviewTags, globalThis
// , internetExplorerChecks, invalidCasts
// , misplacedTypeAnnotation, missingProp
// erties, nonStandardJsDocs, suspiciousC
// ode, strictModuleDepCheck, typeInvalid
// ation, undefinedNames, undefinedVars,
// unknownDefines, uselessCode, visibilit
// y
// --language_in VAL : Sets what language spec that input
// sources conform. Options: ECMASCRIPT3
// (default), ECMASCRIPT5, ECMASCRIPT5_ST
// RICT
// --logging_level VAL : The logging level (standard java.util.
// logging.Level values) for Compiler
// progress. Does not control errors or
// warnings for the JavaScript code
// under compilation
// --manage_closure_dependencies : Automatically sort dependencies so
// that a file that goog.provides symbol
// X will always come before a file that
// goog.requires symbol X. If an input
// provides symbols, and those symbols
// are never required, then that input
// will not be included in the compilatio
// n.
// --module VAL : A JavaScript module specification.
// The format is <name>:<num-js-files>[:[
// <dep>,...][:]]]. Module names must be
// unique. Each dep is the name of a
// module that this module depends on.
// Modules must be listed in dependency
// order, and JS source files must be
// listed in the corresponding order.
// Where --module flags occur in
// relation to --js flags is unimportant.
// Provide the value 'auto' to trigger
// module creation from CommonJSmodules.
// --module_output_path_prefix VAL : Prefix for filenames of compiled JS
// modules. <module-name>.js will be
// appended to this prefix. Directories
// will be created as needed. Use with
// --module
// --module_wrapper VAL : An output wrapper for a JavaScript
// module (optional). The format is
// <name>:<wrapper>. The module name
// must correspond with a module
// specified using --module. The wrapper
// must contain %s as the code placeholde
// r. The %basename% placeholder can
// also be used to substitute the base
// name of the module output file.
// --only_closure_dependencies : Only include files in the transitive
// dependency of the entry points
// (specified by closure_entry_point).
// Files that do not provide dependencies
// will be removed. This supersedesmanage
// _closure_dependencies
// --output_manifest VAL : Prints out a list of all the files in
// the compilation. If --manage_closure_d
// ependencies is on, this will not
// include files that got dropped
// because they were not required. The
// %outname% placeholder expands to the
// JS output file. If you're using
// modularization, using %outname% will
// create a manifest for each module.
// --output_module_dependencies VAL : Prints out a JSON file of dependencies
// between modules.
// --output_wrapper VAL : Interpolate output into this string
// at the place denoted by the marker
// token %output%. Use marker token
// %output|jsstring% to do js string
// escaping on the output.
// --print_ast : Prints a dot file describing the
// internal abstract syntax tree and
// exits
// --print_pass_graph : Prints a dot file describing the
// passes that will get run and exits
// --print_tree : Prints out the parse tree and exits
// --process_closure_primitives : Processes built-ins from the Closure
// library, such as goog.require(),
// goog.provide(), and goog.exportSymbol(
// )
// --process_common_js_modules : Process CommonJS modules to a
// concatenable form.
// --process_jquery_primitives : Processes built-ins from the Jquery
// library, such as jQuery.fn and
// jQuery.extend()
// --property_map_input_file VAL : File containing the serialized
// version of the property renaming map
// produced by a previous compilation
// --property_map_output_file VAL : File where the serialized version of
// the property renaming map produced
// should be saved
// --source_map_format [V1 | DEFAULT | : The source map format to produce.
// V2 | V3] : Options: V1, V2, V3, DEFAULT. DEFAULT
// produces V2.
// --summary_detail_level N : Controls how detailed the compilation
// summary is. Values: 0 (never print
// summary), 1 (print summary only if
// there are errors or warnings), 2
// (print summary if type checking is
// on, see --check_types), 3 (always
// print summary). The default level is 1
// --third_party : Check source validity but do not
// enforce Closure style rules and
// conventions
// --transform_amd_modules : Transform AMD to CommonJS modules.
// --translations_file VAL : Source of translated messages.
// Currently only supports XTB.
// --translations_project VAL : Scopes all translations to the
// specified project.When specified, we
// will use different message ids so
// that messages in different projects
// can have different translations.
// --use_only_custom_externs : Specifies whether the default externs
// should be excluded
// --use_types_for_optimization : Experimental: perform additional
// optimizations based on available
// information. Inaccurate type
// annotations may result in incorrect
// results.
// --variable_map_input_file VAL : File containing the serialized
// version of the variable renaming map
// produced by a previous compilation
// --variable_map_output_file VAL : File where the serialized version of
// the variable renaming map produced
// should be saved
// --version : Prints the compiler version to stderr.
// --warning_level [QUIET | DEFAULT | : Specifies the warning level to use.
// VERBOSE] : Options: QUIET, DEFAULT, VERBOSE
// --warnings_whitelist_file VAL : A file containing warnings to
// suppress. Each line should be of the
// form
// <file-name>:<line-number>? <warning-d
// escription>