2012-10-04 30 views
13

दो फ़ाइलों को श्रेणीबद्ध करने के लिए, यह कुछ इस तरह दिखता है:ग्रंट कॉन्सैट का उपयोग करके, मैं एक ही फाइल के साथ कई अन्य फाइलों के संयोजन को स्वचालित कैसे करूं?

concat: { 
    src: ['common.js','js/app.js'], 
    dest: 'assets/js/app.js' 
    } 

और अगर मैं एक में फ़ाइलों का एक संपूर्ण फ़ोल्डर concat करना चाहते हैं, यह कुछ इस तरह दिखता है:

concat: { 
    src: ['dev/*.js','], 
    dest: 'prod/js/app.js' 
    } 

लेकिन मान लें मेरे पास एक फाइल है जिसे मैं 10 या 20 अन्य फाइलों पर जोड़ना चाहता हूं, और मैं उन्हें अलग से मिलना चाहता हूं? दूसरे शब्दों में, यहाँ मैं के लिए क्या देख रहा हूँ है:

A.js + B.js = AB.js 
A.js + C.js = AC.js 
A.js + D.js = AD.js 
A.js + E.js = AE.js 

और इसी तरह ... हालांकि अधिक विशिष्ट होना करने के लिए, मैं यह पता लगाने कर सकते हैं के रूप में वर्णित फ़ाइलें एक के बाद एक concat करने के लिए कैसे, लेकिन मैं चाहता हूँ उदाहरण के लिए एजे को निर्दिष्ट करने का तरीका जानें, और किसी निर्दिष्ट फ़ाइल में किसी भी फ़ाइल पर इसे संगत करें। तो क्या मैं चाहता हूँ है:

A.js + dev/*.js = AB.js, AC.js, AD.js, AE.js ... 

छद्म कोड में, यहाँ है कि मैं क्या चाहता हूँ:

concat: { 
    src: ['common.js', 'dev/*.js','], // common.js gets concatenated to each file in this directory 
    dest: 'prod/js/*.js' // each file in src gets saved separately in dest 
    } 

मैं किसी भी मदद की सराहना करते हैं, तो मुझे एक कठिन समय पर कैसे करने के लिए जानकारी ढूंढने में समस्या है है यह

+0

किसी को भी आवश्यकता पड़ती है तो यह :)

grunt.registerMultiTask('wrap', 'Wraps source files with specified header and footer', function() { var data = this.data, path = require('path'), dest = grunt.template.process(data.dest), files = grunt.file.expandFiles(this.file.src), header = grunt.file.read(grunt.template.process(data.header)), footer = grunt.file.read(grunt.template.process(data.footer)), sep = grunt.utils.linefeed; files.forEach(function(f) { var p = dest + '/' + path.basename(f), contents = grunt.file.read(f); grunt.file.write(p, header + sep + contents + sep + footer); grunt.log.writeln('File "' + p + '" created.'); }); }); 

उपयोग करने के लिए मजबूत और सुरक्षित है इस तरह एक config के साथ फ़ीड वादा नहीं करते एक समान बात यह है कि यह प्लगइन सिर्फ https://www.npmjs.org/package/grunt-wrap2000 – Tetaxa

+0

आपको केवल इतना करना है कि गंट-कॉन्ट्रिब-कॉन्सट में बैनर और पाद लेख विकल्प का उपयोग करें। अगर आप एक पूरी फाइल को प्रीपेड करना चाहते हैं, तो बस 'बैनर' की आवश्यकता है ('./ foo.js') '। पाद लेख के साथ ही। – jonschlinkert

उत्तर

19

ग्रंट का अंतर्निहित concat कार्य (मैं स्रोत बीटीडब्ल्यू को देखने की अनुशंसा करता हूं) dest: 'prod/js/*.js' जैसी किसी भी चीज़ का समर्थन नहीं करता है, तो आपको प्रत्येक आउटपुट लक्ष्य को अलग से निर्दिष्ट करना होगा जो आपके मामले में एक ओवरकिल है।

आपकी सबसे अच्छी शर्त केवल अपना कोड लिखना है (शायद इसे अपने कस्टम कार्य में लपेटें), यह काफी आसान है। यहां एक सरल रैप मल्टीटास्क है।

wrap: { 
    html: { 
     header: '<%= project.partials %>/head.html', 
     footer: '<%= project.partials %>/footer.html', 
     src: [ 
      '<%= project.pages %>/index.html', 
      '<%= project.pages %>/about.html', 
      '<%= project.pages %>/blog.html' 
     ], 
     dest: '.' // destination *directory*, probably better than specifying same file names twice 
    } 
} 

शायद ज़रुरत पड़े मैं भी अपने बेला अद्यतन: http://jsfiddle.net/dipish/hKkGX/

+0

स्पष्टीकरण के लिए, मैं प्रत्येक फ़ाइल को अलग से अलग करने के लिए चाहूंगा, तो क्या आप यह भी कर सकते हैं: 'prod/js/*। Js'? और आपके उत्तर के लिए धन्यवाद! – jonschlinkert

+0

क्या अद्यतन उत्तर आपके लिए काम करता है? –

+0

ऐसा लगता है कि इसे करना चाहिए, लेकिन मैं इसे काम नहीं कर सकता। मुझे पता है कि यह पूछने के लिए बहुत कुछ है, किसी भी मौके पर आप इसे उदाहरण उदाहरण के अंदर डाल सकते हैं? यहां मेरी गड़बड़ी फाइल के साथ एक jsfiddle है - बस पढ़ने के लिए आसान http://jsfiddle.net/rRpeg/ – jonschlinkert