我的文件夹结构如下所示:
- /projects
- /projects/proj1
- /projects/proj2
- /projects/proj3
- /zips
对于 projects
中的每个文件夹(proj1、proj2 和 proj3),我想压缩每个文件夹的内容并生成 proj1.zip
、proj2。 zip
和 proj3.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'));
});
但是我如何为项目中的每个文件夹执行这样的任务?我可以通过 gulp.src('./projects/*')
来压缩所有文件夹,但是然后呢?
最佳答案
我知道的老问题,而且我对 gulp 还很陌生,所以这可能被认为是一种黑客攻击,但我一直在尝试做你想做的事情,最后我得到了这个。
我的文件结构是这样的:
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
并将结果通过管道传输到 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
再说一次,我距离成为专家还有一百万英里,但这对我有用,如果我理解这个问题也可能对你有用,或者至少给你一些想法。
关于gulp - 如何在 gulp 中压缩多个文件夹生成多个 .zip 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32256964/