Gulp - Zip содержимое вложенных папок и имена этих архивов после них - PullRequest
0 голосов
/ 18 января 2019

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

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

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

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

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 ]

0 голосов
/ 20 января 2019

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

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'))
    })
});
0 голосов
/ 18 января 2019

Вы можете использовать модуль узла path, чтобы получить имя подкаталога следующим образом:

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

И передать имя_папки 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()
})
...