2014-12-31 6 views
5

मैं Grunt cssmin plugin के साथ काम कर रहा हूं। मेरे पास मेरी ग्रंटफाइल में एक ब्लॉक था जो लगभग इस तरह दिखता है:क्या इनपुट फाइल अनुपलब्ध होने पर ग्रंट प्लगइन विफल होने का कोई तरीका है?

cssmin: { 
    target: { 
     files: { 
      '<%= config.target %>/mytarget.css': [ 
       'bower_components/normalize.css/*.css', 
       'bower_components/html5-boilerplate/css/main.css', 
       '<%= config.src %>/css/*.css' 
      ] 
     } 
    } 
} 

थोड़ी देर के लिए यह ठीक काम कर रहा था; लेकिन मैंने इसे दूसरी मशीन पर ले जाया और मेरे बॉवर घटकों को सही तरीके से स्थापित नहीं किया - html5-boilerplate/css/main.css फ़ाइल गायब थी - और फिर भी कार्य सफलतापूर्वक पूरा हो गया। असल में, मैं उस सरणी में पूरी तरह नकली पथ डाल सकता हूं और खनन अभी भी पूरा हो गया है।

क्या कोई तरीका है, सामान्य में, ग्रंट विफल होने का कारण बनता है और अगर इस तरह की सरणी से फ़ाइलें गायब हो जाती हैं तो छोड़ दें? (मुझे यकीन नहीं है कि फाइल सरणी एक सामान्य ग्रंट अवधारणा है या सीएसएसआईएम द्वारा प्रदान की गई है)। यदि नहीं, तो क्या इस विशिष्ट प्लगइन को विफल करने का कोई तरीका है?

(वैसे, मुझे पता है कि HTML5 Boilerplate शायद इन दिनों कुछ हद तक पुराना है, लेकिन मैं पुरानी साइट माइग्रेट करने की प्रक्रिया में हूं। मैंने अपनी बॉवर इंस्टॉल प्रक्रिया भी तय की है ताकि यह पहले चलाया जा सके यह चरण अब स्वचालित रूप से है। हालांकि, मैं अभी भी गायब फाइलों की समस्या के लिए एक और सामान्य समाधान समझना चाहता हूं)।

उत्तर

4

में files array format आप एक चेतावनी बढ़ाने के लिए nonull: true उपयोग कर सकते हैं अगर एक फ़ाइल मौजूद नहीं है:

var gruntLogWarn = grunt.log.warn; 
grunt.log.warn = function(error) { 
    gruntLogWarn(error); // The original warning. 
    grunt.fail.warn('Stop! Hammer time.'); // Forced stop. 
}; 

ऊपर: अपनी खुद की समारोह में grunt.log.warn लपेटकर द्वारा

files: [ 
    { 
    src: [ 
     'a.js', 
     'b.js', 
    ], 
    dest: 'c.js', 
    nonull: true 
    } 
] 

Now force Grunt to stop एक चेतावनी पर किसी भी चेतावनी पर रोक देंगे। लेकिन अगर स्रोत फाइल गायब हैं तो हम रुकना चाहते हैं। 'स्रोत फ़ाइल ... नहीं मिला।' पर फ़िल्टर गंट चेतावनियां:

+0

यह अभी भी बहुत अच्छा नहीं है, क्योंकि इसे चेतावनी फ़ंक्शन के साथ बहुत स्पष्ट कार्य की आवश्यकता है। लेकिन ग्रंट के टूटे हुए डिफ़ॉल्ट व्यवहार के दौर में काम करने के लिए, यह बहुत अच्छा है - धन्यवाद! –

2

आप cssmin से पहले एक कार्य बना सकते हैं।

grunt.task.registerTask('checkIfFilesExist','',function(){ 
    // Check for those files here. Throw if something's wrong. 
}); 

grunt.task.registerTask('checkBeforeDoingStuff',[ 
    'checkIfFilesExist', 
    'cssmin' 
]); 

और iirc, तो आप सिर्फ <% %> के माध्यम से उन्हें हवाला देते हुए cssmin कार्य में एक ही पैरामीटर का पुन: उपयोग कर सकते हैं।

+0

धन्यवाद, यह काम करेगा, लेकिन मुझे नहीं लगता कि यह सेट करने के लिए एक अच्छा उदाहरण है। मुझे फ़ाइलों की सूची दो स्थानों (यहां तक ​​कि पैराम के साथ) दोहराने की आवश्यकता होगी; और मुझे अपने प्रत्येक 'असली' कार्यों के लिए इन कार्यों में से एक बनाना होगा (मैं अपनी स्क्रिप्ट को और अधिक मजबूत बनाने के लिए एक सामान्यीकृत समाधान की तलाश में हूं)। –

+2

इसे स्वीकार करने के रूप में चिह्नित करना, क्योंकि अब तक यह सबसे अच्छा जवाब है। अभी भी एक अधिक सामान्यीकृत समाधान का स्वागत करेंगे जो प्रत्येक कार्य को दोगुना करने की आवश्यकता नहीं है ... –

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

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