Вы можете сделать это, используя gulp-rename .Идея заключается в том, чтобы переименовать ваши каталоги, чтобы оставить только последнюю папку.Это работает в вашем случае, так как вы просто хотите "dir1" и "dir2", но может быть обобщено с некоторой работой.
const gulp = require('gulp');
const rename = require('gulp-rename');
const zip = require('gulp-zip');
const path = require('path');
const debug = require('gulp-debug');
gulp.task('zipp', function () {
return gulp.src(['./dir1/*', 'src/dir2/*'], {base: '.'})
.pipe(rename(function (file) {
// is there a "/" or "\" (your path.sep) in the dirname?
let index = file.dirname.indexOf(path.sep.toString());
if (index != -1) {
// if there is a folder separator, keep only that part just beyond it
// so src/dir2 becomes just dir2
file.dirname = file.dirname.slice(index+1);
}
}))
// just to see the new names (and folder structure) of all the files
.pipe(debug({ title: 'src' }))
.pipe(zip('_final.zip'))
.pipe(gulp.dest('./dist'))
});
Примечание: я первоначально пытался использовать gulp-flatten , который кажетсякак хороший кандидат для этого, но я не мог заставить его работать.
[ Edit ]: я вернулся, чтобы заставить его работать с gulp-flatten и это очень легко в вашем случае.Просто замените трубу rename () на
const flatten = require('gulp-flatten');
.pipe(flatten({includeParents: -1 }))
Это уменьшит структуру папок до последней папки в последовательности пути каждого файла.