2014-04-19 11 views
6

मैं स्ट्रीम में प्रत्येक फ़ाइल को टिप्पणी के रूप में फ़ाइल नाम डालने का एक तरीका ढूंढ रहा हूं। तो आखिरकार समेकित गंतव्य फ़ाइल में फ़ाइल पथ के साथ एक टिप्पणी पंक्ति होगी।Gulpjs concatenation और फ़ाइल नाम

क्या अभी करता है:

pseudocode: concat(file1, file2) 
# output: 
# contents of file 1 
# contents of file 2 

मैं क्या हासिल करना चाहते हैं:

pseudocode: concat(add_comments(file1, file2)) 
# output: 
# // file1 
# contents of file 1 
# // file2 
# contents of file 2 

उत्तर

9

आप श्रृंखलाबद्ध से पहले फ़ाइल नाम पहले जोड़ें करने के लिए the gulp-wrap plugin उपयोग कर सकते हैं:

var wrap = require('gulp-wrap'); 

// in your task... 
    return gulp.src('src/**/*.js') 
     .pipe(wrap('//<%= file.path %>\n<%= contents %>')) 
     .pipe(concat('output.js')) 
     .pipe(gulp.dest('build')) 

रैप प्लगइन आपको लपेटने की अनुमति देता है लॉनाश (या अंडरस्कोर) टेम्पलेट के साथ स्ट्रीम में किसी आइटम की सामग्री। यह contents और file.* गुणों को स्वचालित रूप से प्रदान करता है।

मेरे द्वारा बनाए गए टेम्पलेट बहुत सरल है: यह टिप्पणी के लिए दो स्लैश आउटपुट, फ़ाइल का path, एक नई पंक्ति, और फिर एक ही सामग्री में पारित के रूप में आउटपुट

+0

बिल्कुल वही जो मैं खोज रहा था! धन्यवाद! –

+1

धन्यवाद! अब, मैं फ़ाइल का नाम कैसे प्राप्त कर सकता हूं, न कि पूर्ण पथ? "file.name" काम नहीं किया। साथ ही, यह पता कैसे लगाया जा सकता है कि FILE ऑब्जेक्ट में सभी गुण क्या हैं? – getsetbro

+1

@brOlite - 'file' एक विनाइल ऑब्जेक्ट प्रतीत होता है, https://www.npmjs.com/package/vinyl देखें। 'File.relative' का उपयोग करके मेरे लिए काम किया। – Chris

2

मैं gulp-insert साथ ऐसा किया।। इसमें एक "ट्रांसफॉर्म" फ़ंक्शन है जहां आपको फ़ाइल सामग्री और Vinyl फ़ाइल ऑब्जेक्ट दिया जाता है, और आप नई सामग्री वापस कर देते हैं। तो आप यह कर सकते हैं:

.pipe(insert.transform(function(contents, file){ 
    return '// ' + file.path + '\n' + contents; 
})); 
+0

यह नहीं कहना है कि स्वीकृत उत्तर समाधान नहीं है, लेकिन मुझे अपने उपयोग के मामले में अधिक लचीला होने के लिए गल्प-सम्मिलित मिला। –

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