2015-06-21 71 views
-1

我在枚举目录中的子目录。对于每个子目录,我希望应用一些类似少编译的gulp活动,然后创建特定于该子目录的输出文件。如何使用gulp实现这一目标?

我希望吞咽过程继续下去,因为稍后需要执行进一步的转换步骤。

有人可以帮助我了解如何通过“吞咽管道”中途创建这些文件?

+0

这些措施都没有,似乎对自己特别有挑战性的;哪一个给你麻烦? – Mathletics

回答

1

这似乎是相当有趣的实现和gulp没有任何限制。

我会给你详细的例子,我前一段时间是如何完成这样的任务的。

假设你有目录A.子目录childA,childB和childC包含在directoryA中。所以基本上你的树结构如下:

directoryA 
--childA 
--childB 
--childC 

我一直在寻找一种灵活的解决方案,所以我会建议包括在每个子目录命名你想运行任务的JSON文件。使用fs您可以访问这些文件。您还可以使用run-sequence同步执行吞咽任务。

为了演示目的,在childA子目录中放置一个名为manifest.json的文件。

manifest.json中包含以下声明:

{ 
    "filesToProccess" : ["./childA/*.js", "./childB/*.js"], 
    "tasksToRun" :["taskA", "taskB"] 
} 

最后gulpfile想这样的:

'use strict'; 

//dependencies declared into package.json 
//install them using npm 

var gulp = require('gulp'), 
    fs = require('fs'), 
    runSequence = require('run-sequence'), 
    path = require('path'); 


//these two array will keep the actions you have included into manifest file. 
var filesHolder = [], tasksHolder = []; 

gulp.task('taskA', function() { 
    return gulp.src(filesHolder) 
    .pipe(whatever) 
    .pipe(gulp.dest('whatever')); //chailed actions 
}); 


gulp.task('taskB', function() { 
    return gulp.src(filesHolder) 
    .pipe(whatever) 
    .pipe(gulp.dest('whatever')); 
}); 

//a simple utility function to read all subdirectories of directoryA 

function getDirectories(srcpath) { 
    return fs.readdirSync(srcpath).filter(function(file) { 
    return fs.statSync(path.join(srcpath, file)).isDirectory(); 
    }); 
} 



//finally insert the default gulp task 
gulp.task('default', function(){ 

    var manifest; 

    //map directory's A subdirectories 
    var availableDirs = getDirectories("./directoryA"); 

    //finally loop the available subdirectories, load each manifest file and 
    availableDirs.forEach(function(subdir) { 
     manifest = require("./directoryA/"+subdir+"manifest.json"); 
     filesHolder = manifest.filesToProccess; 
     tasksHolder = manifest.tasksToRun; 
     runSequence(tasksHolder , function() { 
      console.log(" Task ended :" + tasksHolder + " for subdirectory : " + subdir); 
     }); 

    }); 

}); 
相关问题