Gulp - Zip содержимое вложенных папок и имена этих архивов после них
Я хотел бы использовать Gulp & gulp-zip для:
- Zip каждая подпапка
./lessons/
папка - Назовите каждый архив после оригинального имени папки. Итак, заархивированная папка
./lessons/1-hermit-crab/
должен быть назван1-hermit-crab.zip
, - Переместить все эти архивы в
./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'))
})
});