jquery/Gruntfile.js
2013-08-16 10:11:22 -04:00

150 lines
3.6 KiB
JavaScript

module.exports = function( grunt ) {
"use strict";
var gzip = require( "gzip-js" ),
readOptionalJSON = function( filepath ) {
var data = {};
try {
data = grunt.file.readJSON( filepath );
} catch(e) {}
return data;
},
srcHintOptions = readOptionalJSON( "src/.jshintrc" );
// The concatenated file won't pass onevar
// But our modules can
delete srcHintOptions.onevar;
grunt.initConfig({
pkg: grunt.file.readJSON("package.json"),
dst: readOptionalJSON("dist/.destination.json"),
compare_size: {
files: [ "dist/jquery.js", "dist/jquery.min.js" ],
options: {
compress: {
gz: function( contents ) {
return gzip.zip( contents, {} ).length;
}
},
cache: "dist/.sizecache.json"
}
},
build: {
all: {
dest: "dist/jquery.js",
minimum: [
"core",
"selector"
],
// Exclude specified modules if the module matching the key is removed
removeWith: {
ajax: [ "manipulation/_evalUrl" ],
callbacks: [ "deferred" ],
css: [ "effects", "dimensions", "offset" ],
sizzle: [ "css/hidden-visible-selectors", "effects/animated-selector" ]
}
}
},
jsonlint: {
pkg: {
src: [ "package.json" ]
},
bower: {
src: [ "bower.json" ]
}
},
jshint: {
dist: {
src: [ "dist/jquery.js" ],
options: srcHintOptions
},
grunt: {
src: [ "Gruntfile.js", "build/tasks/*" ],
options: {
jshintrc: ".jshintrc"
}
},
tests: {
src: [ "test/**/*.js" ],
options: {
jshintrc: "test/.jshintrc"
}
}
},
testswarm: {
tests: "ajax attributes callbacks core css data deferred dimensions effects event manipulation offset queue selector serialize support traversing Sizzle".split(" ")
},
watch: {
files: [ "<%= jshint.grunt.src %>", "<%= jshint.tests.src %>", "src/**/*.js" ],
tasks: "dev"
},
"pre-uglify": {
all: {
files: {
"dist/jquery.pre-min.js": [ "dist/jquery.js" ]
},
options: {
banner: "\n\n\n\n\n\n\n\n\n\n" + // banner line size must be preserved
"/*! jQuery v<%= pkg.version %> | " +
"(c) 2005, 2013 jQuery Foundation, Inc. | " +
"jquery.org/license\n" +
"//@ sourceMappingURL=jquery.min.map\n" +
"*/\n"
}
}
},
uglify: {
all: {
files: {
"dist/jquery.min.js": [ "dist/jquery.pre-min.js" ]
},
options: {
// Keep our hard-coded banner
preserveComments: "some",
sourceMap: "dist/jquery.min.map",
sourceMappingURL: "jquery.min.map",
report: "min",
beautify: {
ascii_only: true
},
compress: {
hoist_funs: false,
join_vars: false,
loops: false,
unused: false
}
}
}
},
"post-uglify": {
all: {
files: {
"dist/jquery.min.map.tmp": [ "dist/jquery.min.map" ],
"dist/jquery.min.js.tmp": [ "dist/jquery.min.js" ]
},
options: {
tempFiles: [ "dist/jquery.min.map.tmp", "dist/jquery.min.js.tmp", "dist/jquery.pre-min.js" ]
}
}
}
});
// Load grunt tasks from NPM packages
grunt.loadNpmTasks( "grunt-compare-size" );
grunt.loadNpmTasks( "grunt-git-authors" );
grunt.loadNpmTasks( "grunt-contrib-watch" );
grunt.loadNpmTasks( "grunt-contrib-jshint" );
grunt.loadNpmTasks( "grunt-contrib-uglify" );
grunt.loadNpmTasks( "grunt-jsonlint" );
// Integrate jQuery specific tasks
grunt.loadTasks( "build/tasks" );
// Short list as a high frequency watch task
grunt.registerTask( "dev", [ "build:*:*", "jshint" ] );
// Default grunt
grunt.registerTask( "default", [ "jsonlint", "dev", "pre-uglify", "uglify", "post-uglify", "dist:*", "compare_size" ] );
};