2015-08-27 7 views
2

Моя структура папок выглядит следующим образом:Как zip несколько папок, генерирующих несколько файлов .zip в глотках?

- /projects 
- /projects/proj1 
- /projects/proj2 
- /projects/proj3 
- /zips 

Для каждой папки в projects (proj1, proj2 и proj3) Я хочу, чтобы пронестись содержимое каждой из этих папок и генерировать proj1.zip, proj2.zip и proj3.zip в /zips папке.

Следующий пример функции создает единый почтовый файл из папки proj1

zip = require('gulp-zip'); 
gulp.task('default', function() { 
    return gulp.src('./projects/proj1/*') 
     .pipe(zip('proj1.zip')) 
     .pipe(gulp.dest('./zips')); 
}); 

Но как я могу выполнить такую ​​задачу для каждой папки в проектах? Я могу получить все папки для zip на gulp.src('./projects/*'), но что тогда?

ответ

5

Старый вопрос, который я знаю, и я довольно новичок в глотании, поэтому это можно считать взломом, но я только что пытался сделать то, что вам нужно, и я закончил с этим.

Моя файловая структура такова:

proj 
proj/dist 
proj/dist/sub01 
proj/dist/sub02 
proj/dist/sub03 
proj/zipped 

И моя задача в конечном итоге, как это:

var gulp = require("gulp"); 
var foreach = require("gulp-foreach"); 
var zip = require("gulp-zip"); 

gulp.task("zip-dist", function(){ 
    return gulp.src("./dist/*") 
     .pipe(foreach(function(stream, file){ 
      var fileName = file.path.substr(file.path.lastIndexOf("/")+1); 
      gulp.src("./dist/"+fileName+"/**/*") 
       .pipe(zip(fileName+".zip")) 
       .pipe(gulp.dest("./zipped")); 

      return stream; 
     })); 
}); 

Она захватывает все первое содержимое уровне ./dist в качестве источника, а затем трубы к gulp-foreach ,

gulp-foreach просматривает каждый элемент, и я использую простой javascript substr(), чтобы получить имя текущего элемента, который я храню как переменную.

И наконец, я установил новый src, используя сохраненное имя файла var и обработаю результат до gulp-zip, используя сохраненную переменную var как имя заархивированного файла.

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

proj 
proj/dist 
proj/dist/sub01 
proj/dist/sub02 
proj/dist/sub03 
proj/zipped 
proj/zipped/sub01.zip 
proj/zipped/sub02.zip 
proj/zipped/sub03.zip 

Опять же, я миллион миль от будучи экспертом, но это работает для меня, и если я понимаю, вопрос может работать для вас, так или по крайней мере, дать вам некоторые идеи.

+0

Является ли это единственным решением? Я знаю, что это 2 года, вы нашли более чистый способ сделать это за последние 2 года опыта? Спасибо за ваш ответ, хотя ... Очень полезно !! :) –

+0

После использования Gulp в течение некоторого времени я пришел к выводу, что мне было лучше отбросить его полностью и написать собственные сценарии Node, чтобы делать такие вещи. Я обнаружил, что это быстрее, чем Gulp, более мощный и гораздо более интуитивно понятный для создания. Кроме того, лучшее сообщество и документация. Только мое мнение, хотя я так не понимаю, что боюсь. – popClingwrap

Смежные вопросы