jquery/Gruntfile.js
Michał Gołębiowski 7deee6af72 Build: Upgrade to grunt-contrib-jshint 0.7.1 and squash subtasks
grunt-contrib-jshint 0.7.1 allows the jshintrc option to be set to true to have
it read the appropriate config file based on the file being checked. The only
place where we can’t use it is the check for dist/jquery.js that has the onevar
option removed.

Fixes #14504
2013-12-18 15:24:29 +01:00

150 lines
3.2 KiB
JavaScript

module.exports = function( grunt ) {
"use strict";
function readOptionalJSON( filepath ) {
var data = {};
try {
data = grunt.file.readJSON( filepath );
} catch ( e ) {}
return data;
}
var gzip = require( "gzip-js" ),
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: "build/.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/hiddenVisibleSelectors", "effects/animatedSelector" ]
}
}
},
bowercopy: {
options: {
clean: true
},
src: {
files: {
"src/sizzle": "sizzle"
}
},
tests: {
options: {
destPrefix: "test/libs"
},
files: {
"qunit": "qunit/qunit",
"require.js": "requirejs/require.js",
"sinon/fake_timers.js": "sinon/lib/sinon/util/fake_timers.js"
}
}
},
jsonlint: {
pkg: {
src: [ "package.json" ]
},
jscs: {
src: [ ".jscs.json" ]
},
bower: {
src: [ "bower.json" ]
}
},
jshint: {
all: {
src: [
"src/**/*.js", "Gruntfile.js", "test/**/*.js", "build/tasks/*",
"build/{bower-install,release-notes,release}.js"
],
options: {
jshintrc: true
}
},
dist: {
src: "dist/jquery.js",
options: srcHintOptions
}
},
jscs: {
src: "src/**/*.js",
gruntfile: "Gruntfile.js",
tasks: "build/tasks/*.js"
},
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"
},
uglify: {
all: {
files: {
"dist/jquery.min.js": [ "dist/jquery.js" ]
},
options: {
preserveComments: false,
sourceMap: "dist/jquery.min.map",
sourceMappingURL: "jquery.min.map",
report: "min",
beautify: {
ascii_only: true
},
banner: "/*! jQuery v<%= pkg.version %> | " +
"(c) 2005, 2013 jQuery Foundation, Inc. | " +
"jquery.org/license */",
compress: {
hoist_funs: false,
loops: false,
unused: false
}
}
}
}
});
// Load grunt tasks from NPM packages
require( "load-grunt-tasks" )( grunt );
// Integrate jQuery specific tasks
grunt.loadTasks( "build/tasks" );
// Alias bower to bowercopy
grunt.registerTask( "bower", "bowercopy" );
// Short list as a high frequency watch task
grunt.registerTask( "dev", [ "build:*:*", "jshint", "jscs" ] );
// Default grunt
grunt.registerTask( "default", [ "jsonlint", "dev", "uglify", "dist:*", "compare_size" ] );
};