如何压缩多个文件夹生成多个.zip文件在gulp?

时间:2015-08-27 18:31:33

标签: gulp

我的文件夹结构如下所示:

- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips

对于projects(proj1,proj2和proj3)中的每个文件夹,我想压缩每个文件夹的内容,并在proj1.zipproj2.zipproj3.zip中生成{ {1}}文件夹。

以下示例函数从/zips文件夹

生成单个zip文件
proj1

但我如何为项目中的每个文件夹执行此类任务?我可以通过zip = require('gulp-zip'); gulp.task('default', function () { return gulp.src('./projects/proj1/*') .pipe(zip('proj1.zip')) .pipe(gulp.dest('./zips')); }); 将所有文件夹压缩,但是呢?

1 个答案:

答案 0 :(得分:5)

老问题我知道并且我很新闻,所以这可能被认为是一个黑客,但我一直在尝试做你想做的事情,我最终得到了这个。

我的文件结构如下:

proj
proj/dist
proj/dist/sub01
proj/dist/sub02
proj/dist/sub03
proj/zipped

我的任务就这样结束了:

var gulp = require("gulp");
var foreach = require("gulp-foreach");
var zip = require("gulp-zip");

gulp.task("zip-dist", function(){
   return gulp.src("./dist/*")
       .pipe(foreach(function(stream, file){
          var fileName = file.path.substr(file.path.lastIndexOf("/")+1);
          gulp.src("./dist/"+fileName+"/**/*")
              .pipe(zip(fileName+".zip"))
              .pipe(gulp.dest("./zipped"));

          return stream;
       }));
});

它抓取./dist的所有第一级内容作为其来源,然后将其传递给gulp-foreach

gulp-foreach查看每个项目,我使用普通的javascript substr()来获取我存储为变量的当前项目的名称。

最后,我使用存储的fileName var设置一个新的src,并使用存储的var再次将结果传递给gulp-zip作为压缩文件的名称。

结果是一个如下所示的结构:

proj
proj/dist
proj/dist/sub01
proj/dist/sub02
proj/dist/sub03
proj/zipped
proj/zipped/sub01.zip
proj/zipped/sub02.zip
proj/zipped/sub03.zip

同样,我距离成为一名专家只有一百万英里,但这对我有用,如果我理解这个问题也适合你,或者至少可以给你一些想法。