2014-07-16 5 views
8

मेरे पास एक गल्प कार्य है जो समेकित जेएस फाइलें उत्पन्न करता है। मैं प्रोजेक्ट में सभी फाइलों में बदलावों का पता लगाने के लिए एक घड़ी का उपयोग कर रहा हूं और अंतिम निष्पादन के बाद स्रोत फ़ाइलों को बदल दिया गया है, तो केवल कंसट कार्य को फाइलों को दोबारा जोड़ना होगा।गुलप टास्क पाइपलाइन केवल तभी संगत है जब स्रोत फ़ाइल बदलती है

टिप्पणी: मैं और अधिक विशिष्ट घड़ी आदेशों का उपयोग कर सकता है, लेकिन मेरी वास्तविक उत्पादन मामले में हम

है स्रोत जे एस फ़ाइलों के कई संयोजन से कई concatenanted जे एस फ़ाइलें पैदा कर रहे हैं, इसलिए इनमें से प्रत्येक के लिए देखता है और कार्यों बनाने और अधिक जटिल

कुछ इस तरह:

gulp.task('scripts', function() { 
    return gulp.src('src/**/*.js') 
     .pipe(cache('scripts')) 
     // If no changed files in pipeline, exit pipeline, 
     // else add in all src files again 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('build/')); 
}); 

मैं पिछले दो चरणों के लिए एक lazypipe का उपयोग कर तो मैं केवल concat चलाने के लिए और डेस्ट अगर वहाँ फ़ाइलें हैं के बारे में सोचा है, लेकिन मैं नहीं जानता कि कैसे:

  • एक शर्त पर कि क्या वहाँ (कैश के बाद पाइप लाइन में छोड़ दिया अभी भी किसी भी फाइल कर रहे हैं आधारित चलाएं()
  • वापस ले आओ सब स्रोत फ़ाइलें (मूल रूप से धारा reprime को)
gulp.src (फिर से जारी) फिर से

मुझे पता है कि मैं दूसरे भाग के लिए गल्प-याद का उपयोग कर सकता हूं, लेकिन मेरे उत्पादन मामले में अगर यह संभव हो तो स्ट्रीम को पुनर्निर्माण करने के लिए यह बहुत साफ होगा।

किसी ने इसे पहले किया है या कहां से शुरू करना है इसके लिए कोई संकेत है?

+0

क्या आपने [gulp-change] (https://www.npmjs.org/package/gulp-changed/) पर एक नज़र डाली है? –

+0

@ जोशक्लेटन मैंने चेकआउट को बदल दिया और ऐसा लगता है कि यह इस मुद्दे के संबंध में गल्प-कैश के समान व्यवहार करेगा। (यानी यह केवल उस स्ट्रीम में इनपुट फाइलों के माध्यम से गुजरता है जिसे वास्तव में संसाधित करने की आवश्यकता होती है)। मुझे नहीं लगता कि यह फिर से सभी src फ़ाइलों को बाहर निकालने या जोड़ने के मुद्दे को हल करेगा। – Allen

उत्तर

1

प्लगइन gulp-newer चाल करना चाहिए।

gulp.task('scripts', function() { 
    return gulp.src('src/**/*.js') 
     .pipe(newer('app.js')) 
     .pipe(concat('app.js')) 
     .pipe(gulp.dest('build/')); 
}); 
0

इस हालांकि एक पुराने सवाल मैं मैं सिर्फ घूंट-नए जानकारी को जोड़ना होगा सोचा है। Gulp-newer फ़ाइलों के टाइमस्टैम्प के आधार पर परिवर्तनों का पता लगाता है, अगर फ़ाइल हटा दी जाती है तो गल्प-न्यूर इस बदलाव को नहीं चुनता है।

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

3

moettinger's answer (at the time of writing) में कोड गलत है। यहाँ धारा वापस जाने के लिए है:

return gulp.src('src/**/*.js') 
    .pipe(newer('build/app.js')) 
    .pipe(concat('app.js')) 
    .pipe(gulp.dest('build/')); 

जब एक एकल गंतव्य newer() कॉल एक रास्ता है कि वर्तमान निर्देशिका (या एक निरपेक्ष पथ) के सापेक्ष है पास किया जाना चाहिए के खिलाफ परीक्षण। यह gulp.dest() में दिए गए पथ के विरुद्ध व्याख्या करने का मार्ग नहीं हो सकता है। कॉल newer('app.js')newer कॉल के साथ हमेशा concat निष्पादित करने का कारण बन जाएगा क्योंकि यह फ़ाइल नहीं मिलेगा।

documentation एक समान example देता है।

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