Вы не смотрите официальную документацию по глотку. http://github.com/arvindr21/gulp - это только какая-то вилка парня из gulub gitub repo. Официальное репо - http://github.com/gulpjs/gulp/, где base option is indeed documented.
Чтобы ответить на ваш вопрос:
Если вы не укажете base
опцию самостоятельно, то все перед первым Глобо в ваших 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()
.
Если вы хотите, чтобы избежать этого вы должны явно указать 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
EDIT: Если вы передадите массив узоров на номер 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'));
Вместо этого вы должны следовать "Using multiple sources in one task" recipe. Это позволяет объединить два потока, каждый из которых может получить свой собственный вариант 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'));
});
10x. Знаете ли вы, что, если я хочу указать различные базовые пути для разных шаблонов глобалов (заданных в массиве)? например если у меня есть ['source1/examples/**/*. html', 'source2/examples/**/*. html'], и я хочу объединить все примеры в одну папку '/ dist/examples /' ? – epeleg
См. Мое редактирование выше. –
Существуют ли какие-либо особые аспекты этого, когда исходные файлы находятся в папке «../somefolder/» (т. Е. Папке для сестер) и dest должны находиться в папке ./dest/subfolder? – epeleg