aboutsummaryrefslogtreecommitdiffstats
path: root/Gruntfile.js
diff options
context:
space:
mode:
authorTimmy Willison <timmywillisn@gmail.com>2013-08-15 14:15:49 -0400
committerTimmy Willison <timmywillisn@gmail.com>2013-08-15 15:49:49 -0400
commit217cbb7109b7a5bbacd3170e90607ca5972fc1cd (patch)
tree4deb7b42f248f7ea73398dc329584899b5573413 /Gruntfile.js
parent144837afdfab98d6a9f753bc4ccc1feede410101 (diff)
downloadjquery-217cbb7109b7a5bbacd3170e90607ca5972fc1cd.tar.gz
jquery-217cbb7109b7a5bbacd3170e90607ca5972fc1cd.zip
AMD-ify jQuery sourcegit s! Woo! Fixes #14113, #14163.
Conflicts: Gruntfile.js README.md src/ajax.js src/ajax/xhr.js src/attributes.js src/core.js src/css.js src/data.js src/effects.js src/event.js src/manipulation.js src/offset.js src/selector-native.js src/traversing.js test/unit/core.js test/unit/data.js
Diffstat (limited to 'Gruntfile.js')
-rw-r--r--Gruntfile.js295
1 files changed, 14 insertions, 281 deletions
diff --git a/Gruntfile.js b/Gruntfile.js
index b0cf75ce3..538f6fb80 100644
--- a/Gruntfile.js
+++ b/Gruntfile.js
@@ -2,6 +2,9 @@ module.exports = function( grunt ) {
"use strict";
+ // Integrate build task
+ require( "./build/build" )( grunt );
+
var distpaths = [
"dist/jquery.js",
"dist/jquery.min.map",
@@ -36,41 +39,17 @@ module.exports = function( grunt ) {
cache: "dist/.sizecache.json"
}
},
- selector: {
- destFile: "src/selector-sizzle.js",
- apiFile: "src/sizzle-jquery.js",
- srcFile: "bower_components/sizzle/dist/sizzle.js"
- },
build: {
all: {
dest: "dist/jquery.js",
- src: [
- "src/intro.js",
- "src/core.js",
- "src/selector-sizzle.js",
- "src/callbacks.js",
- "src/deferred.js",
- "src/support.js",
- "src/data.js",
- "src/queue.js",
- "src/attributes.js",
- "src/event.js",
- "src/traversing.js",
- "src/manipulation.js",
- { flag: "wrap", src: "src/wrap.js" },
- { flag: "css", src: "src/css.js" },
- "src/serialize.js",
- { flag: "event-alias", src: "src/event-alias.js" },
- { flag: "ajax", src: "src/ajax.js" },
- { flag: "ajax/script", src: "src/ajax/script.js", needs: ["ajax"] },
- { flag: "ajax/jsonp", src: "src/ajax/jsonp.js", needs: [ "ajax", "ajax/script" ] },
- { flag: "ajax/xhr", src: "src/ajax/xhr.js", needs: ["ajax"] },
- { flag: "effects", src: "src/effects.js", needs: ["css"] },
- { flag: "offset", src: "src/offset.js", needs: ["css"] },
- { flag: "dimensions", src: "src/dimensions.js", needs: ["css"] },
- { flag: "deprecated", src: "src/deprecated.js" },
- "src/outro.js"
- ]
+ minimum: [
+ "core",
+ "selector"
+ ],
+ removeWith: {
+ callbacks: [ "deferred" ],
+ css: [ "effects", "dimensions", "offset" ]
+ }
}
},
jsonlint: {
@@ -87,7 +66,7 @@ module.exports = function( grunt ) {
options: srcHintOptions
},
grunt: {
- src: [ "Gruntfile.js" ],
+ src: [ "Gruntfile.js", "build/build.js" ],
options: {
jshintrc: ".jshintrc"
}
@@ -203,252 +182,6 @@ module.exports = function( grunt ) {
);
});
- grunt.registerTask( "selector", "Build Sizzle-based selector module", function() {
-
- var cfg = grunt.config("selector"),
- name = cfg.destFile,
- sizzle = {
- api: grunt.file.read( cfg.apiFile ),
- src: grunt.file.read( cfg.srcFile )
- },
- compiled, parts;
-
- /**
-
- sizzle-jquery.js -> sizzle between "EXPOSE" blocks,
- replace define & window.Sizzle assignment
-
-
- // EXPOSE
- if ( typeof define === "function" && define.amd ) {
- define(function() { return Sizzle; });
- } else {
- window.Sizzle = Sizzle;
- }
- // EXPOSE
-
- Becomes...
-
- Sizzle.attr = jQuery.attr;
- jQuery.find = Sizzle;
- jQuery.expr = Sizzle.selectors;
- jQuery.expr[":"] = jQuery.expr.pseudos;
- jQuery.unique = Sizzle.uniqueSort;
- jQuery.text = Sizzle.getText;
- jQuery.isXMLDoc = Sizzle.isXML;
- jQuery.contains = Sizzle.contains;
-
- */
-
- // Break into 3 pieces
- parts = sizzle.src.split("// EXPOSE");
- // Replace the if/else block with api
- parts[1] = sizzle.api;
- // Rejoin the pieces
- compiled = parts.join("");
-
- grunt.verbose.writeln("Injected " + cfg.apiFile + " into " + cfg.srcFile);
-
- // Write concatenated source to file, and ensure newline-only termination
- grunt.file.write( name, compiled.replace( /\x0d\x0a/g, "\x0a" ) );
-
- // Fail task if errors were logged.
- if ( this.errorCount ) {
- return false;
- }
-
- // Otherwise, print a success message.
- grunt.log.writeln( "File '" + name + "' created." );
- });
-
- // Special "alias" task to make custom build creation less grawlix-y
- grunt.registerTask( "custom", function() {
- var done = this.async(),
- args = [].slice.call(arguments),
- modules = args.length ? args[0].replace(/,/g, ":") : "";
-
-
- // Translation example
- //
- // grunt custom:+ajax,-dimensions,-effects,-offset
- //
- // Becomes:
- //
- // grunt build:*:*:+ajax:-dimensions:-effects:-offset
-
- grunt.log.writeln( "Creating custom build...\n" );
-
- grunt.util.spawn({
- grunt: true,
- args: [ "build:*:*:" + modules, "pre-uglify", "uglify", "dist" ]
- }, function( err, result ) {
- if ( err ) {
- grunt.verbose.error();
- done( err );
- return;
- }
-
- grunt.log.writeln( result.stdout.replace("Done, without errors.", "") );
-
- done();
- });
- });
-
- // Special concat/build task to handle various jQuery build requirements
- grunt.registerMultiTask(
- "build",
- "Concatenate source (include/exclude modules with +/- flags), embed date/version",
- function() {
-
- // Concat specified files.
- var compiled = "",
- modules = this.flags,
- optIn = !modules["*"],
- explicit = optIn || Object.keys(modules).length > 1,
- name = this.data.dest,
- src = this.data.src,
- deps = {},
- excluded = {},
- version = grunt.config( "pkg.version" ),
- excluder = function( flag, needsFlag ) {
- // optIn defaults implicit behavior to weak exclusion
- if ( optIn && !modules[ flag ] && !modules[ "+" + flag ] ) {
- excluded[ flag ] = false;
- }
-
- // explicit or inherited strong exclusion
- if ( excluded[ needsFlag ] || modules[ "-" + flag ] ) {
- excluded[ flag ] = true;
-
- // explicit inclusion overrides weak exclusion
- } else if ( excluded[ needsFlag ] === false &&
- ( modules[ flag ] || modules[ "+" + flag ] ) ) {
-
- delete excluded[ needsFlag ];
-
- // ...all the way down
- if ( deps[ needsFlag ] ) {
- deps[ needsFlag ].forEach(function( subDep ) {
- modules[ needsFlag ] = true;
- excluder( needsFlag, subDep );
- });
- }
- }
- };
-
- // append commit id to version
- if ( process.env.COMMIT ) {
- version += " " + process.env.COMMIT;
- }
-
- // figure out which files to exclude based on these rules in this order:
- // dependency explicit exclude
- // > explicit exclude
- // > explicit include
- // > dependency implicit exclude
- // > implicit exclude
- // examples:
- // * none (implicit exclude)
- // *:* all (implicit include)
- // *:*:-css all except css and dependents (explicit > implicit)
- // *:*:-css:+effects same (excludes effects because explicit include is trumped by explicit exclude of dependency)
- // *:+effects none except effects and its dependencies (explicit include trumps implicit exclude of dependency)
- src.forEach(function( filepath ) {
- var flag = filepath.flag;
-
- if ( flag ) {
-
- excluder(flag);
-
- // check for dependencies
- if ( filepath.needs ) {
- deps[ flag ] = filepath.needs;
- filepath.needs.forEach(function( needsFlag ) {
- excluder( flag, needsFlag );
- });
- }
- }
- });
-
- // append excluded modules to version
- if ( Object.keys( excluded ).length ) {
- version += " -" + Object.keys( excluded ).join( ",-" );
- // set pkg.version to version with excludes, so minified file picks it up
- grunt.config.set( "pkg.version", version );
- }
-
-
- // conditionally concatenate source
- src.forEach(function( filepath ) {
- var flag = filepath.flag,
- specified = false,
- omit = false,
- messages = [];
-
- if ( flag ) {
- if ( excluded[ flag ] !== undefined ) {
- messages.push([
- ( "Excluding " + flag ).red,
- ( "(" + filepath.src + ")" ).grey
- ]);
- specified = true;
- omit = !filepath.alt;
- if ( !omit ) {
- flag += " alternate";
- filepath.src = filepath.alt;
- }
- }
- if ( excluded[ flag ] === undefined ) {
- messages.push([
- ( "Including " + flag ).green,
- ( "(" + filepath.src + ")" ).grey
- ]);
-
- // If this module was actually specified by the
- // builder, then set the flag to include it in the
- // output list
- if ( modules[ "+" + flag ] ) {
- specified = true;
- }
- }
-
- filepath = filepath.src;
-
- // Only display the inclusion/exclusion list when handling
- // an explicit list.
- //
- // Additionally, only display modules that have been specified
- // by the user
- if ( explicit && specified ) {
- messages.forEach(function( message ) {
- grunt.log.writetableln( [ 27, 30 ], message );
- });
- }
- }
-
- if ( !omit ) {
- compiled += grunt.file.read( filepath );
- }
- });
-
- // Embed Version
- // Embed Date
- compiled = compiled.replace( /@VERSION/g, version )
- // yyyy-mm-ddThh:mmZ
- .replace( /@DATE/g, ( new Date() ).toISOString().replace( /:\d+\.\d+Z$/, "Z" ) );
-
- // Write concatenated source to file
- grunt.file.write( name, compiled );
-
- // Fail task if errors were logged.
- if ( this.errorCount ) {
- return false;
- }
-
- // Otherwise, print a success message.
- grunt.log.writeln( "File '" + name + "' created." );
- });
-
// Process files for distribution
grunt.registerTask( "dist", function() {
var stored, flags, paths, nonascii;
@@ -540,7 +273,7 @@ module.exports = function( grunt ) {
// Strip banners
return contents
// Remove the main jQuery banner, it'll be replaced by the new banner anyway.
- .replace( /^\/\*!(?:.|\n)*?\*\/\n?/g, "" )
+ .replace( /^\/\*![\W\w]*?\*\/\n?/g, "" )
// Strip other banners preserving line count.
.replace( /^\/\*!(?:.|\n)*?\*\/\n?/gm, function ( match ) {
return match.replace( /[^\n]/gm, "" );
@@ -585,7 +318,7 @@ module.exports = function( grunt ) {
grunt.loadNpmTasks("grunt-jsonlint");
// Short list as a high frequency watch task
- grunt.registerTask( "dev", [ "selector", "build:*:*", "jshint" ] );
+ grunt.registerTask( "dev", [ "build:*:*", "jshint" ] );
// Default grunt
grunt.registerTask( "default", [ "jsonlint", "dev", "pre-uglify", "uglify", "post-uglify", "dist:*", "compare_size" ] );