gulp zip каталоги с разными базами - PullRequest
0 голосов
/ 25 мая 2018

Я использую gulp 4. У меня следующая файловая структура:

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

Я хочу сжать dir1 и dir2 вместе в одном слое, т.е.не включая каталог src.

Как я могу сделать это с gulp?

Один из вариантов, который я могу придумать, заключается в том, чтобы выполнять разные задачи, копировать их в каталог tmp, а затем архивировать их с помощью base = tmp.Но я хочу найти лучшее решение.

Спасибо,

1 Ответ

0 голосов
/ 25 мая 2018

Вы можете сделать это, используя 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 }))

Это уменьшит структуру папок до последней папки в последовательности пути каждого файла.

...