Ответ 1
(Вы не смотрите на официальной документации глотком. Http://github.com/arvindr21/gulp просто какой - то парень вилка gulpjs GitHub репо. Официальный репо http://github.com/gulpjs/gulp/ где базовый вариант действительно задокументирован.)
Чтобы ответить на ваш вопрос:
Если вы не укажете base
параметр самостоятельно, то все, что находится перед первым gulp.src()
в ваших gulp.src()
автоматически используется в качестве base
параметра и пропускается при записи в целевую папку.
Допустим, у вас есть следующие файлы:
some/path/example/app/js/app.js
some/path/example/vendor/js/vendor.js
some/path/example/vendor/lib/js/lib.js
И это ваш Gulpfile.js:
gulp.src('some/path/**/js/*.js')
.pipe(gulp.dest('output'));
В этом случае все, что до **
, автоматически используется в качестве base
опции. Таким образом, вышесказанное по сути эквивалентно этому:
gulp.src('some/path/**/js/*.js', {base:'some/path/'})
.pipe(gulp.dest('output'));
Это означает, что some/path/
удаляются из пути каждого файла, который соответствует шаблону в gulp.src()
. Результирующая структура в output
папке выглядит следующим образом:
output/example/app/js/app.js
output/example/vendor/js/vendor.js
output/example/vendor/lib/js/lib.js
Таким образом, определенная часть структуры каталогов ваших исходных файлов действительно потеряна. Сколько структуры вашего каталога вы потеряете, зависит от того, где находится первый gulp.src()
в вашем gulp.src()
.
Если вы хотите избежать этого, вы должны явно указать base
параметр:
gulp.src('some/path/**/js/*.js', {base:'.'})
.pipe(gulp.dest('output'));
Теперь some/path/
не будут удалены из ваших путей к файлам, что приведет к следующей структуре папок в output
:
output/some/path/example/app/js/app.js
output/some/path/example/vendor/js/vendor.js
output/some/path/example/vendor/lib/js/lib.js
РЕДАКТИРОВАТЬ: Если вы передаете массив шаблонов в gulp.src()
нет никакого способа указать разные base
опции для каждого из элементов массива. Это, например, не будет работать:
gulp.src(
['source1/examples/**/*.html',
'source2/examples/**/*.html'],
{ base: ['source1/', // Doesn't work.
'source2/']} // Needs to be a string.
).pipe(gulp.dest('dist'));
Вместо этого вы должны следовать рецепту "Использование нескольких источников в одной задаче". Это позволяет объединить два потока, каждый из которых может получить свою собственную base
опцию:
var merge = require('merge-stream');
gulp.task('default', function() {
merge(gulp.src('source1/examples/**/*.html', {base: 'source1/'}),
gulp.src('source2/examples/**/*.html', {base: 'source2/'}))
.pipe(gulp.dest('dist'));
});