Gulp - Zip содержимое вложенных папок и имена этих архивов после них

Я хотел бы использовать Gulp & gulp-zip для:

  1. Zip каждая подпапка ./lessons/ папка
  2. Назовите каждый архив после оригинального имени папки. Итак, заархивированная папка ./lessons/1-hermit-crab/ должен быть назван 1-hermit-crab.zip,
  3. Переместить все эти архивы в ./lessons/ папка.

Я начал с этого, но застрял из-за того, что не смог получить имя zip-каталога, чтобы я мог использовать его для имени архива. Поэтому я храню архивы в подпапке сейчас.

Спасибо за любую помощь.

gulp.task('zip-lessons', function() {
    // Get an array of subdirectories under ./lessons/
    var subDirectories = glob.sync('./lessons/*/');
    // For each directory…
    subDirectories.forEach(function (subDirectory) {
        return gulp.src(subDirectory + '**')
            .pipe(zip('lesson.zip'))
            .pipe(gulp.dest(subDirectory));
    });
});

2 ответа

Вы можете использовать ноды path Модуль для получения имени подкаталога выглядит так:

const path = require('path');
const dirName = path.parse('./folderA/folderB').base // -> 'folderB'

И передать dirName zip():

const { task, src, dest } = require('gulp');
const path = require('path');
const zip = require('gulp-zip');
const glob = require('glob');

const subDirs = glob.sync('./lessons/*');

task('zipLessions', (done) => {
  subDirs.forEach(subDir => {
    const dirName = path.parse(subDir).base;
    src(subDir + '/*')
      .pipe(zip(`${dirName}.zip`))
      .pipe(dest('./lessons'))
  })
  done()
})

Мой коллега предложил мне это решение, которое работает, и теперь я использую его.

const gulp = require('gulp');
const zip = require('gulp-zip');

var fs = require('fs');
var path = require('path');

// Functions

function getFolders(dir) {
    return fs.readdirSync(dir)
      .filter(function(file) {
        return fs.statSync(path.join(dir, file)).isDirectory();
      });
}

// Tasks

// Zip each folder in /lessons and place the archive in the /lessons root
gulp.task('zip-lessons', () => {
    let folders = getFolders('lessons/');
    console.log(folders)
    var tasks = folders.map(function(folder) {
      gulp.src(`lessons/${folder}/**`)
        .pipe(zip(`${folder}.zip`))
        .pipe(gulp.dest('lessons'))
    })
});
Другие вопросы по тегам