使用不同的基数吞噬 zip 目录



我正在使用gulp 4。我有以下文件结构:

├── gulpfile.js ├── dir1 └── src ├── dir2

我想在同一层中压缩dir1dir2,即不包括src目录。

我怎么能用大口大口地做?

我能想到的一种选择是必须执行不同的任务将它们复制到 tmp 目录,然后使用 base = tmp 压缩它们。但我想找到一个更好的解决方案。

谢谢

您可以使用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 }))

这会将文件夹结构减少到每个文件的路径序列中的最后一个文件夹。

相关内容

  • 没有找到相关文章

最新更新