负全局杀死匹配后的gulp.src(glob-stream)正整数

时间:2016-03-09 12:45:24

标签: gulp glob

我受到了印象,并且从code看来,积极的全球只会受到它之后出现的负面影响。

那怎么回事?

gulp.src([
           '../WebContent/g/css/ng-client.css'
        ],{base: '../WebContent'}).pipe(using()) 

会导致列出ng-client.css

虽然

gulp.src([
           '!../WebContent/g/css/*',
           '../WebContent/g/css/ng-client.css'
        ],{base: '../WebContent'}).pipe(using())  

没有列出同一个文件?

我想弄清楚我在想那些导致我期望第二个代码块返回文件的glob流的方式有什么问题 - 不是解决方法如何克服这种情况,我有看到像这样的建议: Glob / minimatch: how to gulp.src() everything, then exclude folder but keep one file in it

我知道我可以做类似的事情:

gulp.src([
       '!../WebContent/g/css/!(ng-client.css)',
       '../WebContent/g/css/ng-client.css'
    ],{base: '../WebContent'}).pipe(using())  

Q是为什么第二个文件没有像我期望的那样返回文件?

1 个答案:

答案 0 :(得分:2)

这很有趣。

您对glob-stream源代码的阅读似乎是正确的。它还匹配glob-stream本身的文档。但是,为什么gulp的行为与预期的不同?我认为这是因为您没有运行您正在阅读的代码。

即使全新安装gulp,您也不会使用glob-stream的最新版本。这是我刚创建的项目中npm list的相关摘录:

├─┬ gulp@3.9.1
│ └─┬ vinyl-fs@0.3.14
│   ├─┬ glob-stream@3.1.18

这意味着正在使用glob-stream@3.1.18。您链接的源代码来自glob-stream@5.0.0

在GitHub上浏览glob-stream的版本标签,文档中第一次提到glob命令就在4.0.1中。因此,主要版本3.x4.x之间的行为似乎发生了向后兼容的不一致。

我们可以直接运行glob-stream来检查这一点:

var gs = require('glob-stream');
gs.create([
  '!../WebContent/g/css/ng*',
  '../WebContent/g/css/ng-client.css'
]).pipe(using());

使用glob-stream@3.1.183.x的最后一个版本)运行此命令不会返回任何文件。使用glob-stream@4.0.0 运行会返回ng-client.css文件。

令我惊讶的是,gulp documentation明确提到了你一直期待的行为。但实际上运行他们在文档中使用的相同示例代码并没有产生他们声称的结果:

gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])

使用gulp@3.9.1运行此功能只会返回client/a.js,但不会返回client/bad.js

看起来其他人遇到了同样的问题。有一个名为gulp-src-ordered-globs的模块(引用this a GitHub issue)。使用此模块,您的示例和Gulp.js文档中的示例都按预期工作。

如果你真的想深究这一切,最好在GitHub或ask somebody on the Gulp.js Gitter上打开一个问题。