如何在Gulp src中排除带.ru/.com后缀的文件夹路径?
解决Gulp排除特定后缀文件夹的问题
嘿,我明白你现在的困扰——想排除.ru和.com后缀的文件夹,但之前的规则完全没起作用,所有hello.js都被压缩了对吧?咱们来一步步搞定这个问题。
先说说你之前配置的问题
你写的这些排除规则比如!folder/*.ru、!folder/*[^ru]其实都没命中目标:
!folder/*.ru只会匹配folder目录下名为xxx.ru的文件,而不是文件夹;要匹配文件夹的话,路径末尾必须加斜杠,还要用**递归匹配子目录。!folder/*[^ru]这种写法反而会排除掉不以ru结尾的文件夹,完全和你的需求相反了。
正确的配置方案
我们需要精准匹配所有以.ru或.com结尾的文件夹,然后排除这些文件夹下的所有内容(或者直接排除这些文件夹里的hello.js)。修改后的gulpfile.js应该是这样的:
var gulp = require('gulp'), uglify = require('gulp-uglify'); gulp.task('run', function () { return gulp.src([ // 先排除所有.ru后缀文件夹下的所有内容 '!folder/*.ru/**', // 再排除所有.com后缀文件夹下的所有内容 '!folder/*.com/**', // 如果landing目录也有同样需求,加上下面两行 // '!landing/*.ru/**', // '!landing/*.com/**', // 最后指定要处理的目标文件 'folder/**/js/hello.js' ]) .pipe(uglify()) .pipe(gulp.dest(function (file) { return file.base; })); });
规则解释
!folder/*.ru/**:*.ru匹配folder下所有以.ru结尾的文件夹,/**表示递归匹配该文件夹下的所有子目录和文件,加上!就会排除这些内容。!folder/*.com/**:和上面同理,针对.com后缀的文件夹。- 最后保留
folder/**/js/hello.js,这样Gulp就只会处理非.ru/.com后缀文件夹里的hello.js了。
这样调整后,你的排除规则应该就能正常生效啦!
内容的提问来源于stack exchange,提问作者Thomas Miracle
相关产品推荐
相关产品推荐

