基本选项如何影响gulp.src& gulp.dest

时间:2016-03-07 13:27:56

标签: gulp

我在尝试复制一组文件时遇到了问题,当调用.dest('some folder')时,整个文件夹结构都丢失了。

我搜索并找到了一个答案,建议我在{base:'.'}gulp.src(...)的电话中提供base作为选项来解决此问题。

documentation for gulp.src options仅表示其选项为:

  

通过glob-stream传递给node-glob的选项。

根本没有列出node-glob documentation for its options基地 glob-stream options documentation仅表明

  

“默认值是在glob开始之前的所有内容(请参阅glob-parent)”

这里也没什么帮助。

那么,传递给gulp.src的{​​{1}}选项对创建的流中的viny6l文件有什么影响?它如何影响gulp.dest命令?

1 个答案:

答案 0 :(得分:50)

(你不是在看官方的gulp文档。http://github.com/arvindr21/gulp只是gulpjs github repo的一个人的分支。官方的回购是http://github.com/gulpjs/gulp/ base option is indeed documented。< / p>

回答你的问题:

如果您自己未指定base选项,则gulp.src()路径中第一个glob之前的所有内容都将自动用作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()模式中第一个glob的位置。

如果您想避免这种情况,则必须明确指定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'));

相反,您必须遵循"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'));
});