2012-09-28 17 views
73

मेरे पास ऐसी स्थिति है जहां मैं विशिष्ट फ़ोल्डर्स को छोड़कर कोडबेस को लिंट करने के लिए गंदगी का उपयोग करने की कोशिश कर रहा हूं।ग्रंट (मिनीमैच/ग्लोब) फ़ोल्डर बहिष्करण

ग्रंट फाइलों से मेल खाने के लिए हुड के नीचे मिनीमैच (bsdglob के समान) का उपयोग करता है, लेकिन मुझे यह पता लगाना प्रतीत नहीं होता है कि एक फ़ोल्डर के बाहर एक .gitignore शैली को कैसे बाहर निकालना है।

मैं इस निगलना करना चाहते हैं:

ignoreme

इनका मेल:

/folder/path/here/to/something/ok.js 
/another/folder/path.js 
/test.js 

नहीं बल्कि मेल खाते हैं इन:,

/folder/ignoreme/something.js 
/folder/path/here/to/ignoreme/metoo/file.js 

यह सब कुछ से मेल खाएगी सहित ignoreme:

/**/*.js 

तो मैं मैं की तरह कुछ कर सकता है सोचा:

/**/!(ignoreme)/**/*.js 

लेकिन वह ignoreme फ़ोल्डर में फ़ाइलें मेल खाता है।

मैं regexes के लिए इस्तेमाल किया हूँ, लेकिन यह पता लगाने के लिए यहां एक पैटर्न या कुछ और दोहराने के लिए कैसे नहीं कर पा रहे - मैं भी तरह सामान की कोशिश की: उम्मीद कर कंटेनर को दोहराने होगा

/(!(ignoreme)|*)*/*.js 

, लेकिन वह नहीं करता है काम नहीं करता है, यह सब कुछ मैच करने में विफल रहता है।

फ़ाइल मार्गों को कुचलने के लिए या तो यह काम करने के लिए किसी भी तरह से regex पास करने के लिए कोई तरीका है, या यह मेरे लिए यह काम करते हैं?

अद्यतन:

यहाँ कैसे मैं वर्तमान में इस मुद्दे से निपटने हूँ:

var pattern = /\/ignoreme\// 
var files = grunt.file.expandFiles(arrayOfFilesPassedToMinimatch).filter(function(f){ 
    return !pattern.test(f) 
}) 

मैं अभी भी दिलचस्पी होगी फ़ोल्डर शामिल नहीं minimatch में संभव हो रहे हैं यदि।

+2

'मानचित्र' का उपयोग करने से 'TRUE' और 'FALSE' मानों की सरणी वाली' फ़ाइलें 'में परिणाम होता है। फ़िल्टर किए गए पथों की सूची होने के लिए 'फ़िल्टर' सही ढंग से' फाइल' सेट करेगा। – deefour

+0

ठीक है आप, रात में टाइप किया होगा। काम करने के लिए कोड नमूना अद्यतन किया। – Jesse

उत्तर

148

वर्तमान में विकास संस्करण 0.4.0a में, grunt.file.expand विधि अब बहिष्करण का समर्थन करती है, और अंतर्निहित मिनीमैच मिलान लाइब्रेरी की तुलना में एक तर्कसंगत कम जटिल तरीके से ऐसा करती है। यह संभव है क्योंकि grunt.file.expandएकाधिक पैटर्न स्वीकार करता है (जबकि मिनीमैच केवल एक स्वीकार करता है)।

the grunt.file.expand documentation से:

इस विधि को स्वीकार करता है या तो अल्पविराम वाइल्डकार्ड पैटर्न या वाइल्डकार्ड पैटर्न की एक सरणी अलग कर दिया। पथ से मिलान करने वाले पथ जो शुरू होते हैं! लौटा सरणी से बाहर रखा जाएगा। पैटर्न क्रम में संसाधित होते हैं, इसलिए समावेश और बहिष्करण आदेश महत्वपूर्ण है।

आप ['/**/*.js', '!**/ignoreme/**'] निर्दिष्ट कर सकते हैं और जब तक पहले पैटर्न परिणाम सेट करने के लिए सभी .js फ़ाइलें जोड़ना होगा, दूसरा पैटर्न तो परिणाम सेट से सभी /ignoreme/ फ़ाइलों को हटा हैं इसका मतलब है कि।

यदि आप वास्तव में उत्सुक हैं तो grunt.file.match unit tests पर एक नज़र डालें।

ध्यान दें कि इस कार्यक्षमता की पेशकश करने वाले अनुदान का संस्करण आधिकारिक तौर पर जारी नहीं किया गया है, लेकिन यदि आप किसी प्रोजेक्ट में इसका उपयोग करने में रुचि रखते हैं, तो When will I be able to use in-development feature 'X'? FAQ प्रविष्टि देखें।

+0

उत्तर के लिए बहुत बहुत धन्यवाद! यह मेरी समस्या के लिए एक और अधिक सुरुचिपूर्ण समाधान की तरह दिखता है - मैं एक स्थिर रिलीज की प्रतीक्षा करूंगा, लेकिन जब यह बाहर हो जाएगा तो मैं स्विच करूंगा! – Jesse

+14

ध्यान देने योग्य मूल्य: बहिष्करण पैटर्न केवल तभी काम करते हैं जब वे आते हैं * बाद में * जो कुछ भी है-वे-बहिष्कार एक समावेशी पैटर्न से मेल खाता है। पहले मेरे बहिष्करण पैटर्न डालकर उलझन में था। –

+3

'गंदगी घड़ी --verbose' यह देखने के लिए कि कौन सी फाइलें देखी जा रही हैं – Shanimal

संबंधित मुद्दे