2016-02-05 5 views
1

Допустим, мы имеем следующую структуру папок:Глоток: сохранение структуры папок на месте назначения для отдельных файлов

rootDirectory 
    │ 
    │ 
    ├──a 
    │ ├──a.txt 
    │ 
    ├──b 
    │ ├──a 
    │  ├──a.txt 
    │ 
    ├──c.txt 

также, скажем, нам нужно написать задачу глотка, который будет принимать a.txt в папке a и c.txt; выполните некоторые манипуляции с ними, а затем подключите их в каталог build. Я хочу, чтобы файлы, скопированные в папку сборки, сохраняли свою структуру каталогов в папке build (и я не хочу, чтобы файлы, которые не должны обрабатываться задачей, чтобы попасть в папку build), вот так:

rootDirectory 
    │ 
    │ 
    ├──a 
    │ ├──a.txt 
    │ 
    ├──b 
    │ ├──a 
    │  ├──a.txt 
    │ 
    ├──c.txt 
    │ 
    ├──build 
      │ 
      ├──a 
      │ ├──a.txt 
      │   
      ├──c.txt 

Теперь вот что меня озадачивает. Если я указываю пути к конкретным файлам:

gulp.task('foo', function(){ 
    var files = [ 
     path.join(__dirname, 'c.txt'), 
     path.join(__dirname, 'a/a.txt') 
    ]; 
    gulp.src(files) 
     .pipe(gulp.dest(path.join(__dirname, build)); 
}); 

тогда я выравнивать структуру папок в каталоге build.

Если, однако, я использую шаблон универсализации:

gulp.task('foo', function(){ 
    var files = [ 
     path.join(__dirname, '**/c.txt'), 
     path.join(__dirname, '**/a/a.txt') 
    ]; 
    gulp.src(files) 
     .pipe(gulp.dest(path.join(__dirname, build)); 
}); 

затем сохраняется структура папок, но эта подстановка картина будет также предназначаться b/a.txt, которые я не хочу.

Есть ли способ достичь того, что я описываю в Gulp? В основном, говоря Gulp: «Вот, возьмите этот файл, сделайте все, что вам нужно, и поместите его в другой путь, сохраняя структуру папок, начиная с этого корневого пути»? Помимо, в частности, отрицание путей глобирования, которые я не хочу сопоставлять?

+0

это может помочь: https://github.com/gulpjs/gulp/issues/151 – sobolevn

+0

@sobolevn: вы имеете в виду, используя 'base' параметр? ('gulp.src ([" blah-blah "], {base:". "})')? Мне нужно попробовать это; выглядит многообещающим. – azangru

+0

Yay, опция 'base' передана как второй аргумент gulp.src! Спасибо! – azangru

ответ

3

Чтобы сохранить иерархию, вы должны передать параметр {base: "."} на gulp.src. Что-то вроде этого:

gulp.task('foo', function(){ 
    var files = [ 
     path.join(__dirname, 'c.txt'), 
     path.join(__dirname, 'a/a.txt') 
    ]; 
    gulp.src(files, '.') 
     .pipe(gulp.dest(path.join(__dirname, build)); 
}); 
+0

Да, вот что я в итоге сделал. Благодаря! – azangru

+1

Похоже, вы просто проходите мимо. как второй аргумент. Разве это не должно быть {base: '.'}? – light24bulbs