Gulp中有什么方法可以在流中获取匹配的glob模式?

时间:2019-03-31 23:41:00

标签: gulp

有没有办法知道Gulp的src()流中Vinyl对象匹配的是什么glob模式?例如,使用rename插件,我可以获取Vinyl对象,并获取其pathdirname等。但是现在在我的Gulpfile中,我有一些逻辑可以通过查找表重新创建glob模式(用于从dev仓库同步到本地实时站点)。

1 个答案:

答案 0 :(得分:2)

我看不到任何文档表明匹配的glob模式记录在文件旁边。如果将数组传递到gulp.src,则可以尝试使用micromatch库将当前文件的路径与数组匹配。这将要求传入的全局模式必须唯一,因为一个特定的文件最多只能匹配一个模式。

执行此操作的示例:

const gulp = require('gulp'),
    tap = require('gulp-tap'),
    mm = require('micromatch');

function example() {
    const srcGlobPatternsArray = ['src/js/**/*.js', 'src/css/**/*.css'];
    return gulp.src(srcGlobPatternsArray).pipe(
        tap((file) => {
            const globIndex = srcGlobPatternsArray.findIndex((element) => {
                return mm.isMatch(
                    file.history[0].substring(file.cwd.length + 1),
                    element
                );
            });
            if (globIndex !== -1) {
                console.log(
                    'Glob pattern matched: ' +
                        srcGlobPatternsArray[globIndex] +
                        ' at index ' +
                        globIndex
                );
            } else {
                console.log('Could not match glob');
            }
        })
    );
}

exports.default = example;