无法理解gulp.src()的行为

这是我的代码:

'use strict'; var gulp = require('gulp'), $ = require('gulp-load-plugins')(), module.exports = function(options) { gulp.task('test', function () { gulp.src('external/bower_components/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss') .pipe(gulp.dest('dist/')); }); }; 

这个stringgulp.dest('dest /')会将文件_bootstrap.scss保存在'dest /'文件夹中。

如果我改变string

gulp.src('external/bower_components/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')

串起来

gulp.src('external/*/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')

然后串

 gulp.dest('dest/') 

将在dest / bower_components / bootstrap-sass-official / assets / stylesheets文件夹中保存文件_bootstrap.scss。

你能解释一下,给我的链接在哪里阅读关于为什么在第一种情况下,我们有没有很多的文件夹内的dest文件夹,在第二种情况下有很多文件夹内的dest文件夹?

如果我理解正确,在第二种情况下,glob模式将被转换为完整文件path的数组。 这意味着在我的例子中,glob nodejs模块会将glob模式的'external / * / bootstrap-sass-official / assets / stylesheets / _bootstrap.scss'转换为array ['external / bower_components / bootstrap-sass-official / assets / stylesheets / _bootstrap.scss']。 那么为什么我在第二种情况下在“dest /”文件夹内有大量的嵌套文件夹,而在第一种情况下在“dest /”文件夹内没有嵌套的文件夹呢?

那确实有点奇怪,因为非常隐含的节点glob行为。 但事实上,这是你想要的。 例如,考虑一下你在external有多个文件夹,这两个文件夹都有文件bootstrap-sass-official/assets/stylesheets/_bootstrap.scss') 。 那么你不能在你的dest中保存两个同名的文件。

没有查看节点glob源,我认为它通过在/*/之后斩断文件path来减轻这种情况,并且会自动将它附加到你的destpath。

说了这是隐含的行为,如果你真的需要这个数组或者想在未来添加文件的话,你可以通过自己指定数组gulp.src(['firstfile.js'])来轻松避免它。

由于Gulp文档不提供太多的globbing模式的信息,我发现这些链接是最好的帮助。 在node-glob和gulp上捣毁 。