每个文件夹生成单独一个文件
原文链接 https://ronghuaxueleng.github.io/2016/08/11/gulp-gulp%E6%AF%8F%E4%B8%AA%E6%96%87%E4%BB%B6%E5%A4%B9%E7%94%9F%E6%88%90%E5%8D%95%E7%8B%AC%E4%B8%80%E4%B8%AA%E6%96%87%E4%BB%B6/
注:以下为加速网络访问所做的原文缓存,经过重新格式化,可能存在格式方面的问题,或偶有遗漏信息,请以原文为准。
如果你有一整套的文件目录,并且希望执行相应的一套任务,比如...
<!-- more -->
/scripts
/scripts/jquery/*.js
/scripts/angularjs/*.js
...然后希望完成如下的结果h...
/scripts
/scripts/jquery.min.js
/scripts/angularjs.min.js
...你将会需要像下面所示的东西...
var fs = require('fs');
var path = require('path');
var merge = require('merge-stream');
var gulp = require('gulp');
var concat = require('gulp-concat');
var rename = require('gulp-rename');
var uglify = require('gulp-uglify');
var scriptsPath = 'src/scripts';
function getFolders(dir) {
return fs.readdirSync(dir)
.filter(function(file) {
return fs.statSync(path.join(dir, file)).isDirectory();
});
}
gulp.task('scripts', function() {
var folders = getFolders(scriptsPath);
var tasks = folders.map(function(folder) {
// 拼接成 foldername.js
// 写入输出
// 压缩
// 重命名为 folder.min.js
// 再一次写入输出
return gulp.src(path.join(scriptsPath, folder, '/*.js'))
.pipe(concat(folder + '.js'))
.pipe(gulp.dest(scriptsPath))
.pipe(uglify())
.pipe(rename(folder + '.min.js'))
.pipe(gulp.dest(scriptsPath));
});
return merge(tasks);
});
注:
- folders.map - 在每一个文件夹中分别执行一次函数,并且返回异步 stream
- merge - 汇总 stream,并且在所有的 stream 都完成后完成