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

如何压缩多个文件夹,在gulp中生成多个.zip文件?,gulp,Gulp,我的文件夹结构如下所示: - /projects - /projects/proj1 - /projects/proj2 - /projects/proj3 - /zips var gulp = require("gulp"); var foreach = require("gulp-foreach"); var zip = require("gulp-zip"); gulp.task("zip-dist", function(){ return gulp.src("./dist/*"

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

- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips
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;
       }));
});
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
对于
projects
(proj1、proj2和proj3)中的每个文件夹,我希望压缩每个文件夹的内容,并在
/zips
文件夹中生成
proj1.zip
proj2.zip
proj3.zip

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

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

但我如何为项目中的每个文件夹执行这样的任务呢?我可以通过
gulp.src('./projects/*')
将所有文件夹压缩到zip中,但是接下来呢?

我知道这个老问题,而且我对gulp很陌生,所以这可能被认为是一个黑客行为,但我只是尝试着去做你想要做的事情,我最终得到了这个问题

我的文件结构如下:

proj
proj/dist
proj/dist/sub01
proj/dist/sub02
proj/dist/sub03
proj/zipped
我的任务就这样结束了:

- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips
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;
       }));
});
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
它获取
/dist
的所有第一级内容作为其源,然后通过管道将其传输到

gulp-foreach
查看每个项目,我使用一个简单的javascript
substr()
获取当前项目的名称,并将其存储为变量

最后,我使用存储的文件名var设置了一个新的
src
,并通过管道将结果再次使用存储的var作为压缩文件的名称

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

- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips
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;
       }));
});
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

再说一次,我离成为专家还有一百万英里之遥,但这对我来说很有效,如果我明白这个问题也可能对你有用,或者至少能给你一些想法。

这是唯一的解决方案吗?我知道这是2年前的事了,在过去2年的工作经验中,你有没有找到一个更干净的方法?谢谢你的回答。。。非常有用!!:)在使用Gulp一段时间后,我得出结论,最好完全放弃它,编写自己的节点脚本来完成这类工作。我发现这比吞咽更快,更强大,更直观。还有,更好的社区和文档。只有我的意见,恐怕没有真正的答案。