aboutsummaryrefslogtreecommitdiffstats
path: root/Gruntfile.js
diff options
context:
space:
mode:
Diffstat (limited to 'Gruntfile.js')
-rw-r--r--Gruntfile.js202
1 files changed, 11 insertions, 191 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index 8338a015a..aea1abbbe 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -2,15 +2,7 @@ module.exports = function( grunt ) {
"use strict";
- // Integrate build task
- require( "./build/build" )( grunt );
-
- var distpaths = [
- "dist/jquery.js",
- "dist/jquery.min.map",
- "dist/jquery.min.js"
- ],
- gzip = require("gzip-js"),
+ var gzip = require( "gzip-js" ),
readOptionalJSON = function( filepath ) {
var data = {};
try {
@@ -18,7 +10,6 @@ module.exports = function( grunt ) {
} catch(e) {}
return data;
},
- fs = require( "fs" ),
srcHintOptions = readOptionalJSON( "src/.jshintrc" );
// The concatenated file won't pass onevar
@@ -68,7 +59,7 @@ module.exports = function( grunt ) {
options: srcHintOptions
},
grunt: {
- src: [ "Gruntfile.js", "build/build.js" ],
+ src: [ "Gruntfile.js", "build/tasks/*" ],
options: {
jshintrc: ".jshintrc"
}
@@ -138,187 +129,16 @@ module.exports = function( grunt ) {
}
});
- grunt.registerTask( "testswarm", function( commit, configFile ) {
- var jobName,
- testswarm = require( "testswarm" ),
- runs = {},
- done = this.async(),
- pull = /PR-(\d+)/.exec( commit ),
- config = grunt.file.readJSON( configFile ).jquery,
- tests = grunt.config([ this.name, "tests" ]);
-
- if ( pull ) {
- jobName = "jQuery pull <a href='https://github.com/jquery/jquery/pull/" +
- pull[ 1 ] + "'>#" + pull[ 1 ] + "</a>";
- } else {
- jobName = "jQuery commit #<a href='https://github.com/jquery/jquery/commit/" +
- commit + "'>" + commit.substr( 0, 10 ) + "</a>";
- }
-
- tests.forEach(function( test ) {
- runs[test] = config.testUrl + commit + "/test/index.html?module=" + test;
- });
-
- // TODO: create separate job for git/git2 so we can do different browsersets
- testswarm.createClient( {
- url: config.swarmUrl,
- pollInterval: 10000,
- timeout: 1000 * 60 * 30
- } )
- .addReporter( testswarm.reporters.cli )
- .auth( {
- id: config.authUsername,
- token: config.authToken
- })
- .addjob(
- {
- name: jobName,
- runs: runs,
- runMax: config.runMax,
- browserSets: "popular-no-old-ie"
- }, function( err, passed ) {
- if ( err ) {
- grunt.log.error( err );
- }
- done( passed );
- }
- );
- });
-
- // Process files for distribution
- grunt.registerTask( "dist", function() {
- var stored, flags, paths, nonascii;
-
- // Check for stored destination paths
- // ( set in dist/.destination.json )
- stored = Object.keys( grunt.config( "dst" ) );
-
- // Allow command line input as well
- flags = Object.keys( this.flags );
-
- // Combine all output target paths
- paths = [].concat( stored, flags ).filter(function( path ) {
- return path !== "*";
- });
-
- // Ensure the dist files are pure ASCII
- nonascii = false;
-
- distpaths.forEach(function( filename ) {
- var i, c,
- text = fs.readFileSync( filename, "utf8" );
-
- // Ensure files use only \n for line endings, not \r\n
- if ( /\x0d\x0a/.test( text ) ) {
- grunt.log.writeln( filename + ": Incorrect line endings (\\r\\n)" );
- nonascii = true;
- }
-
- // Ensure only ASCII chars so script tags don't need a charset attribute
- if ( text.length !== Buffer.byteLength( text, "utf8" ) ) {
- grunt.log.writeln( filename + ": Non-ASCII characters detected:" );
- for ( i = 0; i < text.length; i++ ) {
- c = text.charCodeAt( i );
- if ( c > 127 ) {
- grunt.log.writeln( "- position " + i + ": " + c );
- grunt.log.writeln( "-- " + text.substring( i - 20, i + 20 ) );
- break;
- }
- }
- nonascii = true;
- }
-
- // Modify map/min so that it points to files in the same folder;
- // see https://github.com/mishoo/UglifyJS2/issues/47
- if ( /\.map$/.test( filename ) ) {
- text = text.replace( /"dist\//g, "\"" );
- fs.writeFileSync( filename, text, "utf-8" );
-
- // Use our hard-coded sourceMap directive instead of the autogenerated one (#13274; #13776)
- } else if ( /\.min\.js$/.test( filename ) ) {
- i = 0;
- text = text.replace( /(?:\/\*|)\n?\/\/@\s*sourceMappingURL=.*(\n\*\/|)/g,
- function( match ) {
- if ( i++ ) {
- return "";
- }
- return match;
- });
- fs.writeFileSync( filename, text, "utf-8" );
- }
-
- // Optionally copy dist files to other locations
- paths.forEach(function( path ) {
- var created;
-
- if ( !/\/$/.test( path ) ) {
- path += "/";
- }
-
- created = path + filename.replace( "dist/", "" );
- grunt.file.write( created, text );
- grunt.log.writeln( "File '" + created + "' created." );
- });
- });
-
- return !nonascii;
- });
-
- // Work around grunt-contrib-uglify sourceMap issues (jQuery #13776)
- grunt.registerMultiTask( "pre-uglify", function() {
- var banner = this.options().banner;
-
- this.files.forEach(function( mapping ) {
- // Join src
- var input = mapping.src.map(function( file ) {
- var contents = grunt.file.read( file );
-
- // Strip banners
- return contents
- // Remove the main jQuery banner, it'll be replaced by the new banner anyway.
- .replace( /^\/\*![\W\w]*?\*\/\n?/g, "" )
- // Strip other banners preserving line count.
- .replace( /^\/\*!(?:.|\n)*?\*\/\n?/gm, function ( match ) {
- return match.replace( /[^\n]/gm, "" );
- });
- }).join("\n");
-
- // Write temp file (with optional banner)
- grunt.file.write( mapping.dest, ( banner || "" ) + input );
- });
- });
-
- // Change the map file to point back to jquery.js instead of jquery.pre-min.js.
- // The problem is caused by the pre-uglify task.
- // Also, remove temporary files.
- grunt.registerMultiTask( "post-uglify", function() {
- this.files.forEach(function( mapping ) {
- var mapFileName = mapping.src[ 0 ];
-
- // Rename the file to a temporary name.
- fs.renameSync( mapFileName, mapping.dest);
- grunt.file.write( mapFileName, grunt.file.read( mapping.dest )
- // The uglify task erroneously prepends dist/ to file names.
- .replace( /"dist\//g, "\"" )
- // Refer to the source jquery.js, not the temporary jquery.pre-min.js.
- .replace( /\.pre-min\./g, "." )
- // There's already a pragma at the beginning of the file, remove the one at the end.
- .replace( /\/\/@ sourceMappingURL=jquery\.min\.map$/g, "" ));
- });
-
- // Remove temporary files.
- this.options().tempFiles.forEach(function( fileName ) {
- fs.unlink( fileName );
- });
- });
-
// 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");
+ 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" ] );