0

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

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

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

我怎么能用 gulp 做到这一点?

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

谢谢,

4

1 回答 1

0

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

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

于 2018-05-25T03:51:24.293 回答