2013-08-01 25 views
1

我對我的一個項目運行grunt concat任務,它看起來是這樣的:運行的concat任務動態地與目標文件動態創建

/** 
* Concatenate | Dependencies Scripts 
*/ 

concat: { 
    dependencies: { 
     files: {   
      "./Ditcoop/js/plugins.min.js": ["./Ditcoop/js/vendor/**/*.min.js", "!./Ditcoop/js/vendor/modernizr/*.js", "!./Ditcoop/js/vendor/jquery/*.js"], 
      "./Global/js/plugins.min.js": ["./Global/js/vendor/**/*.min.js", "!./Global/js/vendor/modernizr/*.js", "!./Global/js/vendor/jquery/*.js"], 
      "./Webshop/js/plugins.min.js": ["./Webshop/js/vendor/**/*.min.js", "!./Webshop/js/vendor/modernizr/*.js", "!./Webshop/js/vendor/jquery/*.js"] 
     } 
    } 
} 

我的問題是,如果我能以某種方式讓更多的動態而不必指定每個根文件夾。我在想是這樣的:

concat: { 
    dependencies: { 
     files: {   
      "./*/js/plugins.min.js": ["./*/js/vendor/**/*.min.js", "!./*/js/vendor/modernizr/*.js", "!./*/js/vendor/jquery/*.js"], 
     } 
    } 
} 

我敢肯定,我不能做這種方式,但我可以用expand選項,我只是不知道我怎麼可以使用它,所以我可以做在正確的根文件夾下,所以我不會創建多次運行concat的目標文件。

回答

3

永遠記住Gruntfiles是JavaScript的:)

grunt.initConfig({ 
    concat: { 
    dependencies: { 
     files: (function() { 
     var files = Object.create(null); 
     grunt.file.expand({filter: 'isDirectory'}, '*').forEach(function(dir) { 
      files[dir + '/js/plugins.min.js'] = [ 
      dir + '/js/vendor/**/*.min.js', 
      '!' + dir + '/js/vendor/modernizr/*.js', 
      '!' + dir + '/js/vendor/jquery/*.js' 
      ]; 
     }); 
     return files; 
     }()), 
    }, 
    }, 
}); 

但是,如果你的依賴處理邏輯是這樣的複雜,你可能要考慮使用一個模塊加載,如browserify或requirejs。 concat任務實際上只是將簡單文件連接在一起。

+0

這就是我需要做的,在concat之前我運行一個uglify任務在相同的風格,之後我需要將所有這些文件合併成一個。 – Roland