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

use*_*521 2 gulp

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

- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips
Run Code Online (Sandbox Code Playgroud)

对于projects(proj1,proj2和proj3)中的每个文件夹,我想压缩每个文件夹的内容并生成proj1.zip,proj2.zipproj3.zip/zips文件夹中.

以下示例函数从proj1文件夹生成单个zip文件

zip = require('gulp-zip');
gulp.task('default', function () {
    return gulp.src('./projects/proj1/*')
        .pipe(zip('proj1.zip'))
        .pipe(gulp.dest('./zips'));
});
Run Code Online (Sandbox Code Playgroud)

但是我如何为项目中的每个文件夹执行此类任务?我可以把所有的文件夹都压缩gulp.src('./projects/*')但是呢?

pop*_*rap 5

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

我的文件结构是这样的:

proj
proj/dist
proj/dist/sub01
proj/dist/sub02
proj/dist/sub03
proj/zipped
Run Code Online (Sandbox Code Playgroud)

而我的任务最终结果如下:

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;
       }));
});
Run Code Online (Sandbox Code Playgroud)

它抓取所有第一级内容./dist作为其源,然后将其管道gulp-foreach.

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

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

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

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
Run Code Online (Sandbox Code Playgroud)

再说一次,我距离成为一名专家只有一百万英里,但这对我有用,如果我理解这个问题可能对你有用,或者至少给你一些想法.