【问题标题】:Specific glob pattern not matching after broad exclude广泛排除后特定的 glob 模式不匹配
【发布时间】:2014-08-04 20:55:20
【问题描述】:

我使用 Gulp 作为构建过程,最近遇到了一些与页面特定文件注入有关的问题(通过 gulp-inject fyi)。

一些上下文:我正在抓取所有 HTML 文件,然后一次查看一个,以便我可以使用它们的文件名将特​​定文件包含到 glob 集合中,例如 index.html 我有:

[
    'export/assets/js/libs/jquery*.js',    // jQuery first
    'export/assets/js/libs/*.js',          // Followed by all the libs
    'export/assets/js/*.js',               // Followed by any other js file
    '!export/assets/js/view-*.js',         // Excluding all view-* files [see note]
    '!export/assets/**/_*.js',             // Excluding underscore prefixed files
    '!export/assets/js/ie*.js',            // Excluding all IE libs
    'export/assets/js/view-index*.js'      // Including page specific file
]

[note] 可能有更多特定于页面的文件,例如。 view-profile.jsview-contact.js 但在此迭代中,只能包含 view-index.js

然后上面的集合被gulp.src()'d 和处理,只有view-index.js 永远不会进入流..

编辑:

我接受了下面的答案,因为它指出我所拥有的不足以实现我的目标。我找到了一种解决方法,我传入 export/assets/js/**/*.js 并通过 gulp-ignore 过滤掉我不需要的内容。

【问题讨论】:

    标签: javascript node.js glob gulp


    【解决方案1】:

    由于 minimatch 不明确支持否定通配模式,大多数库都实现了类似“收集所有否定,现在调用其余部分的 minimatch,现在应用所有否定”之类的功能。见https://github.com/wearefractal/glob-stream/blob/master/index.js#L28(注意glob-streamvinyl-fs使用,它暴露为gulp's src。)

    【讨论】:

    • 所以你是说我无法通过 gulp 的默认 src() 来完成上述工作?奇怪的是,当我实现它时它起作用了,但直到现在我才需要这个功能,那时我注意到它不再起作用了。
    • 接受这个作为答案,因为没有明显的解决方案。我用我的解决方法更新了我原来的问题。