gulp-if正则与glob匹配:精准筛选文件的3种高阶姿势

📅 2026/8/17 23:10:12
gulp-if正则与glob匹配:精准筛选文件的3种高阶姿势
gulp-if正则与glob匹配精准筛选文件的3种高阶姿势【免费下载链接】gulp-ifConditionally run a task项目地址: https://gitcode.com/gh_mirrors/gu/gulp-if在Gulp构建流程中如何精准筛选文件、按需执行任务一直是前端工程化绕不开的话题。gulp-if就是为解决这个问题而生的Gulp条件插件它的核心功能是Conditionally run a task按条件运行任务当条件为真时执行A插件为假时执行B插件甚至可以跳过所有处理直接放行。本文面向新手和普通开发者重点讲解 gulp-if 正则与 glob 匹配的3种高阶玩法帮你彻底告别一刀切式的构建脚本。gulp-if 是什么一个会看路的Gulp插件 gulp-if 相当于管道中的一个交通警察每个文件vinyl 对象经过它时都会按你设定的条件被分流到不同的处理流中。判断依据可以是布尔值、函数返回值也可以直接是正则表达式或glob 模式而文件路径file.path就是它判断的身份证。它只有 100 多行核心代码逻辑非常轻量却能把构建脚本的灵活性提升一个档次。高阶姿势一gulp-if正则匹配精确到文件路径的每个字符 gulp-if正则匹配是最精准的筛选方式。正则表达式会直接作用于文件路径适合需要精确控制文件名、目录层级或扩展名的场景。比如只想压缩以.min.js结尾的文件而普通.js文件原样输出var gulpif require(gulp-if); var uglify require(gulp-uglify); gulp.task(scripts, function() { return gulp.src(./src/**/*.js) .pipe(gulpif(/\.min\.js$/, uglify())) .pipe(gulp.dest(./dist)); });正则写起来灵活但可读性稍弱适合处理路径里有规律的文件集比如按目录名、版本号或命名规范筛选。高阶姿势二gulp-if glob匹配一行通配符批量筛选 如果你对正则的符号感到头大gulp-if glob匹配会更友好。glob 模式用*、**、?等通配符表达一类文件理解成本低、团队协作不易出错。例如只对lib目录下的文件做压缩其余跳过.pipe(gulpif(lib/**/*.js, uglify()))注意这里传入的是字符串形式的 glob 模式gulp-if 底层会交给 minimatch 处理你还可以通过第四个参数minimatchOptions传入额外配置如{ nocase: true }忽略大小写。官方源码 index.js 中清晰展示了这个参数的透传逻辑。高阶姿势三函数 正则/glob 组合动态精准筛选 前两种姿势适合静态规则而动态筛选才是高阶玩法的精髓把正则或 glob 写进函数里每次针对单个文件做个性化判断。比如结合 glob 与文件内容判断只处理改动过的核心模块var condition function (file) { return file.path.indexOf(/src/) -1 /\.js$/.test(file.path); }; gulp.src(./src/**/*) .pipe(gulpif(condition, uglify())) .pipe(gulp.dest(./dist));函数条件会接收到完整的 vinylfile对象除了路径你还能读取file.contents、file.relative等属性判断维度瞬间扩展。这套机制依赖底层的 gulp-match 模块测试用例见 test/fn.js想深入理解可直接阅读源码。彩蛋技巧布尔值与三元分支让流程更聪明 ⚡除了正则和 globgulp-if 还支持布尔值条件——当条件恒定时它甚至不会逐文件求值性能更优参考 index.js 的实现。更酷的是三参数玩法条件为真走A流为假走B流相当于流式三元运算符.pipe(gulpif(isProd, uglify(), beautify()))总结3种姿势如何选规则简单、要精确用gulp-if正则匹配规则直观、要批量用gulp-if glob匹配规则复杂、要动态用函数 正则/glob 组合。想亲手实验这些玩法克隆https://gitcode.com/gh_mirrors/gu/gulp-if即可获得完整源码与测试。掌握这3种姿势你的Gulp构建流程就能真正做到精准筛选、按需处理工程效率直接起飞【免费下载链接】gulp-ifConditionally run a task项目地址: https://gitcode.com/gh_mirrors/gu/gulp-if创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考