我写下面的片段作为grunt-aws-s3
任务的一部分。globbing - 正确匹配某些文件扩展名但不匹配的方法
var weekCache = 'css|js';
var yearCache = 'jpg|jpeg|png|gif|ico|eot|otf|ttf|woff|woff2';
var prodFiles = [
{expand: true, cwd: 'public', src: ['**/*.!('+weekCache+'|'+yearCache+')'], dest: '/'},
{expand: true, cwd: 'public', src: ['**/*[email protected]('+weekCache+')'], dest: '/', stream: true, params: {CacheControl: 'max-age=604800, public'}}, // enable stream to allow large files
{expand: true, cwd: 'public', src: ['**/*[email protected]('+yearCache+')'], dest: '/', stream: true, params: {CacheControl: 'max-age=31536000, public'}},
];
的想法是有三个不同的比赛里prodFiles
变量:
- 匹配所有除非
yearCache
和weekCache
- 匹配的全部文件
weekCache
- 进行扩展匹配的那些文件匹配所有带有扩展名的文件
yearCache
它或多或少地工作,我有public
目录及其子目录中的63个文件。但是,这些规则匹配72个文件,显然有些文件至少匹配两次。
我的通配符有什么问题?
编辑:
测试与显示错误node-glob-all
在第一图案:
$ glob-all '**/*.!(css|js)'
assets/css/style-nuvue6sithwirecbhvw3dkaobiojqvtadsnhguwi7k04xklybw5djl1smadp.min.css
assets/images/favicon.ico
assets/js/jquery.fancybox.js
assets/js/jquery.fancybox-thumbs.js
我期待这种模式返回的一切,但排除*.js
和*.css
。针对其他两个规则进行测试返回正确的文件。
$ glob-all '**/*[email protected](css|js)'
assets/css/style-nuvue6sithwirecbhvw3dkaobiojqvtadsnhguwi7k04xklybw5djl1smadp.min.css
assets/js/jquery.fancybox.js
assets/js/jquery.fancybox-thumbs.js
所以,问题是如何正确地否定模式'**/*.!(css|js)'
?
优秀的解释。谢谢。 – JrBenito
我认为,你提出的globbing没有捕获没有点的文件,我说得对吗? – JrBenito
这是正确的。 – 76484