我正在使用 gulp 4。我有以下文件结构:
├── gulpfile.js
├── dir1
└── src
├── dir2
我想压缩dir1
并dir2
一起在同一层,即不包括src
目录。
我怎么能用 gulp 做到这一点?
我能想到的一种选择是必须执行不同的任务将它们复制到 tmp 目录,然后使用 base = tmp.zip 压缩它们。但我想找到更好的解决方案。
谢谢,
我正在使用 gulp 4。我有以下文件结构:
├── gulpfile.js
├── dir1
└── src
├── dir2
我想压缩dir1
并dir2
一起在同一层,即不包括src
目录。
我怎么能用 gulp 做到这一点?
我能想到的一种选择是必须执行不同的任务将它们复制到 tmp 目录,然后使用 base = tmp.zip 压缩它们。但我想找到更好的解决方案。
谢谢,
您可以使用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这似乎是一个很好的候选者,但我无法让它工作。
[编辑]:我回去让它与gulp-flatten一起工作,在你的情况下这很容易。只需将 rename() 管道替换为
const flatten = require('gulp-flatten');
.pipe(flatten({includeParents: -1 }))
这会将文件夹结构减少到每个文件路径序列中的最后一个文件夹。