![](/img/trans.png)
[英]Can I achieve this with Gulp + Browserify? Do I need Webpack instead?
[英]How can I achieve this using gulp?
我正在枚举目录中的子目录。 对于每个子目录,我想应用一些 gulp 活动,例如 less 编译,然后创建一个特定于该子目录的输出文件。
我希望 gulp 过程继续进行,因为稍后需要执行进一步的转换步骤。
有人可以帮助我了解如何在“gulp 管道”中途创建这些文件吗?
这看起来很有趣,gulp 完全没有限制。
我将给你详细的例子,我之前是如何设法完成这样的任务的。
假设您有目录A。 子目录 childA、childB 和 childC 包含在目录 A 中。 所以基本上你的树结构看起来像:
directoryA
--childA
--childB
--childC
我一直在寻找灵活的解决方案,因此我建议在每个子目录中包含一个 JSON 文件,命名您要运行的任务。 使用fs您可以访问这些文件。 您还可以使用 run-sequence 同步执行 gulp 任务。
出于演示目的,在 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);
});
});
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.