Commit f13de6b3 authored by Rick Waldron's avatar Rick Waldron

Simplify the terminal command args syntax for custom builds. Update README

parent 47298a7d
...@@ -75,6 +75,7 @@ The built version of jQuery will be put in the `dist/` subdirectory. ...@@ -75,6 +75,7 @@ The built version of jQuery will be put in the `dist/` subdirectory.
Starting in jQuery 1.8, special builds can now be created that optionally exclude or include any of the following modules: Starting in jQuery 1.8, special builds can now be created that optionally exclude or include any of the following modules:
- ajax - ajax
- css
- dimensions - dimensions
- effects - effects
- offset - offset
...@@ -85,34 +86,42 @@ To create a custom build, use the following special `grunt` commands: ...@@ -85,34 +86,42 @@ To create a custom build, use the following special `grunt` commands:
Exclude **ajax**: Exclude **ajax**:
```bash ```bash
grunt build:*:*:-ajax grunt custom:-ajax
```
Exclude **css**:
```bash
grunt custom:-css
``` ```
Exclude **dimensions**: Exclude **dimensions**:
```bash ```bash
grunt build:*:*:-dimensions grunt custom:-dimensions
``` ```
Exclude **effects**: Exclude **effects**:
```bash ```bash
grunt build:*:*:-effects grunt custom:-effects
``` ```
Exclude **offset**: Exclude **offset**:
```bash ```bash
grunt build:*:*:-offset grunt custom:-offset
``` ```
Exclude **all** optional modules: Exclude **all** optional modules:
```bash ```bash
grunt build:*:*:-ajax:-dimensions:-effects:-offset grunt custom:-ajax,-css,-dimensions,-effects,-offset
``` ```
Note: dependencies will be handled internally, by the build process.
Running the Unit Tests Running the Unit Tests
-------------------------------------- --------------------------------------
......
...@@ -181,7 +181,41 @@ module.exports = function( grunt ) { ...@@ -181,7 +181,41 @@ module.exports = function( grunt ) {
}); });
// 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 build:+ajax,-dimensions,-effects,-offset
//
// Becomes:
//
// grunt build:*:*:-ajax:-dimensions:-effects:-offset
grunt.log.writeln( "Creating custom build...\n" );
grunt.utils.spawn({
cmd: "grunt",
args: [ "build:*:*:" + modules ]
}, function( err, result ) {
if ( err ) {
grunt.verbose.error();
done( err );
return;
}
grunt.log.writeln( result.replace("Done, without errors.", "") );
done();
});
});
// Special concat/build task to handle various jQuery build requirements // Special concat/build task to handle various jQuery build requirements
//
grunt.registerMultiTask( grunt.registerMultiTask(
"build", "build",
"Concatenate source (include/exclude modules with +/- flags), embed date/version", "Concatenate source (include/exclude modules with +/- flags), embed date/version",
...@@ -190,6 +224,7 @@ module.exports = function( grunt ) { ...@@ -190,6 +224,7 @@ module.exports = function( grunt ) {
var i, var i,
compiled = "", compiled = "",
modules = this.flags, modules = this.flags,
explicit = Object.keys(modules).length > 1,
optIn = !modules["*"], optIn = !modules["*"],
name = this.file.dest, name = this.file.dest,
excluded = {}, excluded = {},
...@@ -208,6 +243,7 @@ module.exports = function( grunt ) { ...@@ -208,6 +243,7 @@ module.exports = function( grunt ) {
} }
}; };
// figure out which files to exclude based on these rules in this order: // figure out which files to exclude based on these rules in this order:
// explicit > implicit (explicit also means a dependency/dependent that was explicit) // explicit > implicit (explicit also means a dependency/dependent that was explicit)
// exclude > include // exclude > include
...@@ -215,9 +251,9 @@ module.exports = function( grunt ) { ...@@ -215,9 +251,9 @@ module.exports = function( grunt ) {
// *: none (implicit exclude) // *: none (implicit exclude)
// *:* all (implicit include) // *:* all (implicit include)
// *:*:-effects all except effects (explicit > implicit) // *:*:-effects all except effects (explicit > implicit)
// *:*:-css all except css and it's deps (explicit) // *:*:-css all except css and its deps (explicit)
// *:*:-css:+effects all except css and it's deps (explicit exclude from dep. trumps explicit include) // *:*:-css:+effects all except css and its deps (explicit exclude from dep. trumps explicit include)
// *:+effects none except effects and it's deps (explicit include from dep. trumps implicit exclude) // *:+effects none except effects and its deps (explicit include from dep. trumps implicit exclude)
this.file.src.forEach(function( filepath ) { this.file.src.forEach(function( filepath ) {
var flag = filepath.flag; var flag = filepath.flag;
...@@ -236,13 +272,37 @@ module.exports = function( grunt ) { ...@@ -236,13 +272,37 @@ module.exports = function( grunt ) {
// conditionally concatenate source // conditionally concatenate source
this.file.src.forEach(function( filepath ) { this.file.src.forEach(function( filepath ) {
var flag = filepath.flag; var flag = filepath.flag,
specified = false,
message = "";
if ( flag ) { if ( flag ) {
if ( excluded[ flag ] !== undefined ) { if ( excluded[ flag ] !== undefined ) {
log.writeln( "Excluding " + flag + ": '" + filepath.src + "'." ); message = ( "Excluding " + flag ).red;
return; specified = true;
} else {
message = ( "Including " + flag ).green;
// If this module was actually specified by the
// builder, then st the flag to include it in the
// output list
if ( modules[ "+" + flag ] ) {
specified = true;
} }
log.writeln( "Including " + flag + ": '" + 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 ) {
grunt.log.writetableln([ 27, 30 ], [
message,
( "(" + filepath.src + ")").grey
]);
}
filepath = filepath.src; filepath = filepath.src;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment