glob匹配,排除所有JS文件

Posted

技术标签:

【中文标题】glob匹配,排除所有JS文件【英文标题】:Glob matching, exclude all JS files 【发布时间】:2014-06-26 18:17:43 【问题描述】:

我是 gulp.js 的新用户。我想将所有非 javascript 文件移动到构建目录。我现在得到的是这样的:

//Test copy
gulp.task('test-copy', function() 
    gulp.src(['myProject/src/**/*.!(js|map|src)'])
        .pipe(gulp.dest('myProject/build'));
);


//Results for various files
myProject/css/style.css //Copied - GOOD
myProject/html/index.html //Copied - GOOD
myProject/js/foo.js //Not Copied - GOOD
myProject/js/bar.min.js //Copied - BAD!
myProject/js/jquery-2.0.3.min.js //Copied - BAD!
myProject/js/jquery-2.0.3.min.map //Copied - BAD!

如您所见,它只匹配文件路径字符串中的第一个点之后,而不是最后一个点,如我所愿。如何修改 glob 搜索字符串以使其行为符合我的意愿?

【问题讨论】:

我没用过 gulp,但是你能在传递给 gulp.src 的模式末尾加一个 $ 吗? 不,很遗憾这不是正则表达式,而是extglob 语法。 【参考方案1】:

试试这个 glob 模式:

myProject/src/**/!(*.js|*.map|*.src)

【讨论】:

工作就像一个魅力。对于未来的落后者,这会导致我的 .json 清单文件也被排除在外的问题。我像这样修改了脚本,这意味着它仍然复制 config.js*.json 文件:myProject/src/**/*(config.js|*.json|!(*.js|*.src|*map)) 这对于与节点的grunt-ssh 和minimatch 进行文件匹配非常有帮助。 这很烦人,即使它看起来很常见。

以上是关于glob匹配,排除所有JS文件的主要内容,如果未能解决你的问题,请参考以下文章

#每天五分钟之IT技能包# 前端自动化构建利器 gulp 方法篇

匹配多种文件类型的更漂亮的 glob

如何使用正则表达式 (glob) 搜索文件树

查找具有通配符匹配的文件

问题解决glob.glob 如何匹配所有子文件夹下的文件 —— recursive=True

node-glob学习