我寫下面的片段作爲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