]> source.dussan.org Git - jquery.git/commitdiff
Allow users to store custom dist destinations in dist/.destination.json
authorRick Waldron <waldron.rick@gmail.com>
Tue, 5 Jun 2012 17:10:01 +0000 (13:10 -0400)
committerRick Waldron <waldron.rick@gmail.com>
Tue, 5 Jun 2012 17:10:01 +0000 (13:10 -0400)
Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
.gitignore
README.md
grunt.js

index 0973197c15df6ef3f2843245bdad4db7ec8d0b97..9868a53695b3e1c5f5dcad61cebfc8b753152939 100644 (file)
@@ -7,6 +7,7 @@ dist
 *.patch
 /*.html
 .DS_Store
+dist/.destination.json
 dist/.sizecache.json
 build/.sizecache.json
 node_modules
index 5eaf8677436a10e2820e331f665b9899fb082d2b..0d84e10726917175431f76f675282f8ac7c4e030 100644 (file)
--- a/README.md
+++ b/README.md
@@ -98,6 +98,20 @@ With this example, the output files would be:
 
 ```
 
+If you want to add a permanent copy destination, create a file in `dist/` called ".destination.json". Inside the file, paste and customize the following:
+
+```json
+
+{
+  "/Absolute/path/to/other/destination": true
+}
+
+```
+
+
+Additionally, both methods can be combined.
+
+
 
 Updating Submodules
 -------------------
index f29bbded11f705f29904c7fe3fb5b096a54315fa..5bba8fe9206eb186a69ab802a255070712bd4284 100644 (file)
--- a/grunt.js
+++ b/grunt.js
@@ -1,9 +1,25 @@
-// Resources
-// https://gist.github.com/2489540
+/**
+ * Resources
+ *
+ * https://gist.github.com/2489540
+ *
+ */
 
 /*global config:true, task:true*/
 module.exports = function( grunt ) {
 
+       // readOptionalJSON
+       // by Ben Alman
+       // https://gist.github.com/2876125
+       function readOptionalJSON( filepath ) {
+               var data = {};
+               try {
+                       data = grunt.file.readJSON(filepath);
+                       grunt.log.write( "Reading data from " + filepath + "..." ).ok();
+               } catch(e) {}
+               return data;
+       }
+
        var task = grunt.task;
        var file = grunt.file;
        var utils = grunt.utils;
@@ -20,6 +36,7 @@ module.exports = function( grunt ) {
 
        grunt.initConfig({
                pkg: "<json:package.json>",
+               dst: readOptionalJSON("dist/.destination.json"),
                meta: {
                        banner: "/*! jQuery v@<%= pkg.version %> jquery.com | jquery.org/license */"
                },
@@ -234,32 +251,47 @@ module.exports = function( grunt ) {
 
        // Allow custom dist file locations
        grunt.registerTask( "dist", function() {
-               var keys, dir;
+               var flags, paths, stored;
 
-               keys = Object.keys( this.flags );
+               // Check for stored destination paths
+               // ( set in dist/.destination.json )
+               stored = Object.keys( config("dst") );
 
-               if ( keys.length ) {
+               // Allow command line input as well
+               flags = Object.keys( this.flags );
 
-                       // If a custom dist dir wasn't specified
-                       // there is nothing to do.
-                       if ( keys[0] === "*" ) {
-                               return;
-                       }
+               // Combine all output target paths
+               paths = [].concat( stored, flags ).filter(function( path ) {
+                       return path !== "*";
+               });
 
-                       dir = keys[0];
 
-                       if ( !/\/$/.test( dir ) ) {
-                               dir += "/";
-                       }
+               // Proceed only if there are actual
+               // paths to write to
+               if ( paths.length ) {
 
                        // 'distpaths' is declared at the top of the
-                       // module.exports function scope.
+                       // module.exports function scope. It is an array
+                       // of default files that jQuery creates
                        distpaths.forEach(function( filename ) {
-                               var created = dir + filename.replace( "dist/", "" );
+                               paths.forEach(function( path ) {
+                                       var created;
+
+                                       if ( !/\/$/.test( path ) ) {
+                                               path += "/";
+                                       }
+
+                                       created = path + filename.replace( "dist/", "" );
+
+                                       if ( !/^\//.test( path ) ) {
+                                               log.error( "File '" + created + "' was NOT created." );
+                                               return;
+                                       }
 
-                               file.write( created, file.read( filename ) );
+                                       file.write( created, file.read(filename) );
 
-                               log.writeln( "File '" + created + "' created." );
+                                       log.writeln( "File '" + created + "' created." );
+                               });
                        });
                }
        });