2016-02-17 3 views
3

Я работаю над веб-приложением, которое использует Node.js. В этом приложении у меня есть файл Gulp. Я использую Gulp 4. Во время моего процесса сборки я пытаюсь скопировать сразу несколько файлов в директории. Моя структура каталогов выглядит так:Gulp - копирование нескольких файлов на отдельные пути

./ 
    dest/ 
    source/ 
    child/ 
     index.js 
     index.bak 
    file.js 
    README.md 

Моя настоящая структура каталогов более активна. Тем не менее, я пытаюсь скопировать ./source/file.js в ./dest/file.js и ./source/child/index.js в ./dest/child/index.js. Обратите внимание, что я не хочу копировать README.md или index.bak на ./dest directory. В попытке сделать это, у меня есть следующие функции:

function copy() { 
    let files = [ 
    'source/file.js', 
    'source/child/**/*.*' 
    ]; 

    return gulp 
    .src(files) 
    .pipe(gulp.dest('dest')) 
    ; 
} 

Моя проблема, все просто будет скопирован в каталог dest. Структура каталогов не сохраняется. Хотя было бы хорошо, если бы я мог понять, как копировать файлы в разные каталоги в одной задаче. Я попытался следующие:

function copy() { 
    return gulp 
     .src('source/child/index.js') 
     .pipe(gulp.dest('dest/child')) 
     .src('source/file.js') 
     .pipe(gulp.dest('dest')) 
    ;    
} 

Однако такой подход просто генерирует ошибку, которая говорит:

TypeError: gulp.src(...).pipe(...).src is not a function 

Итак, я застрял. Я не уверен, как копировать несколько файлов в несколько каталогов из одной задачи gulp.

+0

Вы также можете попробовать 'gulp-if-esle plugin' –

ответ

5

Вам необходимо использовать базовый вариант, как указано здесь ref. Это гарантирует, что ваш каталог будет скопирован как есть.

function copy() { 
    let files = [ 
    'source/file.js', 
    'source/child/**/*.*' 
    ]; 

    return gulp 
    .src(files, {base: 'source/'}) 
    .pipe(gulp.dest('dest')); 
} 
+0

Wow! Это потрясающе. Я понятия не имел о параметрах, которые могут быть переданы функции src. Благодаря! –