gulp.src (glob-stream) 负 glob 杀死匹配后的正 glob
gulp.src (glob-stream) positive glob after negative glob kills match
我的印象是 code 正 glob 只会受到紧随其后的负 glob 的限制。
那么
是怎么回事
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 流的思考方式有什么问题导致我期望第二个代码块也 return 文件 - 而不是解决方法克服这种情况,我看到了像这样的建议:
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())
问题是为什么第二个 return 文件不像我期望的那样?
这很有趣。
您对 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.x
和 4.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.18
(3.x
的最新版本)return 没有文件。 运行 它与 glob-stream@4.0.0
一起 return ng-client.css
文件。
让我感到奇怪的是 gulp documentation 明确提到了您一直期待的行为。但实际上 运行 他们在文档中使用的示例代码并没有产生他们声称的结果:
gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
运行 这与 gulp@3.9.1
只有 returns client/a.js
,而不是 client/bad.js
.
看来其他人也遇到了同样的问题。有一个名为 gulp-src-ordered-globs
(which refers to this a GitHub issue) 的模块。使用此模块,您的示例和 Gulp.js 文档中的示例都按预期工作。
如果你真的想深入了解这一切,最好在 GitHub 或 ask somebody on the Gulp.js Gitter.
上打开一个问题
我的印象是 code 正 glob 只会受到紧随其后的负 glob 的限制。
那么
是怎么回事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 流的思考方式有什么问题导致我期望第二个代码块也 return 文件 - 而不是解决方法克服这种情况,我看到了像这样的建议: 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())
问题是为什么第二个 return 文件不像我期望的那样?
这很有趣。
您对 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.x
和 4.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.18
(3.x
的最新版本)return 没有文件。 运行 它与 glob-stream@4.0.0
一起 return ng-client.css
文件。
让我感到奇怪的是 gulp documentation 明确提到了您一直期待的行为。但实际上 运行 他们在文档中使用的示例代码并没有产生他们声称的结果:
gulp.src(['client/*.js', '!client/b*.js', 'client/bad.js'])
运行 这与 gulp@3.9.1
只有 returns client/a.js
,而不是 client/bad.js
.
看来其他人也遇到了同样的问题。有一个名为 gulp-src-ordered-globs
(which refers to this a GitHub issue) 的模块。使用此模块,您的示例和 Gulp.js 文档中的示例都按预期工作。
如果你真的想深入了解这一切,最好在 GitHub 或 ask somebody on the Gulp.js Gitter.
上打开一个问题