每个文件夹生成单独一个文件

每个文件夹生成单独一个文件

如果你有一整套的文件目录,并且希望执行相应的一套任务,比如...

/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) {
      return gulp.src(path.join(scriptsPath, folder, '/*.js'))
        // 拼接进 foldername.js
        .pipe(concat(folder + '.js'))
        // 写入输出
        .pipe(gulp.dest(scriptsPath))
        // 代码压缩
        .pipe(uglify())
        // 重命名为 folder.min.js
        .pipe(rename(folder + '.min.js'))
        // 再一次写入输出
        .pipe(gulp.dest(scriptsPath));
   });

   return merge(tasks);
});

注:

  • folders.map - 在每一个文件夹中分别执行一次函数,并且返回异步 stream
  • merge - 汇总 stream,并且在所有的 stream 都完成后完成

有疑问、勘误、请您在下方留言,感谢您的支持 ღ( ´・ᴗ・` )!

感谢您阅读,这篇文章归 极客点子版权所有.
如果转载,请注明出处: 极客点子版权所有(/page/685.html) 知识共享许可协议
本网站使用 创作共用 归属 - 非商业用途 - 共享4.0国际许可协议的相同方式 许可.

关于作者:

    简介:

    系统架构师 、作家、
    研究方向:数据分析、 深度学习、 服务器架构、 系统原理