2015-09-14 6 views
9

मैं एक फ़ोल्डर में सभी जेएस 6 फाइलों को पार करने के लिए, और मूल एएस 6 फाइलों के लिए एक वर्किंग सोर्समैप के साथ एक समेकित एकल फ़ाइल (जेएस 5) के साथ समाप्त करने के लिए, गंट और बेबेल का उपयोग करके कोशिश कर रहा हूं। हालांकि स्रोतमैपिंग काम नहीं करता है। मेरे कोलाहल, नीचे concat सेटिंग्स:ग्रंट बेबेल कई फाइलें और स्रोत मैपिंग को संरक्षित करें

"babel": { 
     options: { 
      sourceMap : true 
     }, 
     dist: { 
      files:[ 
       { 
        expand: true, 
        cwd: 'wwwroot/js/src', 
        src: ['*.js'], 
        dest: 'tmp/js' 
       }] 
     } 
    }, 

    concat: { 
     options: { 
      sourceMap: true 
     }, 
     js: { 
      src: [ 
       'tmp/js/*.js', 
      ], 
      dest: 'wwwroot/js/app.js' 
     } 
    } 

Versions: 
"grunt": "0.4.5", 
"grunt-bower-task": "0.4.0", 
"grunt-babel": "5.0.1", 
"grunt-contrib-concat" : "0.5.1" 

मैं js फ़ाइलें और src नक्शे (tmp निर्देशिका) का एक बहुत साथ सबसे पहले किसी फ़ोल्डर के साथ समाप्त कर रहा हूँ। लेकिन उन्हें एक फ़ाइल में संयोजित करना पूरी तरह से स्रोत मैपिंग के साथ गड़बड़ कर देता है।

विचार? साथ ही, क्या मैं किसी भी तरह अस्थायी फ़ाइलों को बनाने और परिणाम को केवल पाइप को संगत में छोड़ सकता हूं?

+0

आप concat काम चला सकते हैं पहले और फिर एकल फ़ाइल पर स्रोत मानचित्र विकल्प के साथ बेबेल कार्य चलाएं –

+0

@PrayagVerma जो इसे थोड़ा बेहतर बनाता है क्योंकि मैं es6 कोड डीबग कर सकता हूं। मूल फ़ाइल से नहीं बल्कि अच्छी तरह से बेहतर है। – Todilo

+0

बेबेल के लिए एक इनपुटसोर्समैप विकल्प प्रतीत होता है लेकिन इसे काम करने के लिए यह मेरे लिए मामूली प्रतीत नहीं होता है। – Todilo

उत्तर

14

कार्य के क्रम को उलट करने से यह बहुत आसान हो जाएगा। सबसे पहले जेएस फाइलों पर concat कार्य चलाएं। एकल फाइल पर कि रन babel कार्य निम्नलिखित विकल्पों के

options: { 
       sourceMap: true, 
       inputSourceMap: grunt.file.readJSON('script.js.map') 
      }, 

साथ concat कार्य पहले से द्वारा बनाई गई करने के बाद यहाँ script.js.map फ़ाइल स्रोत नक्शा concat कार्य द्वारा उत्पन्न फ़ाइल का नाम है। inputSourceMap विकल्प के लिए एक स्रोत नक्शा वस्तु excepts रूप में, हम यह grunt.file एपीआई readJSON विधि का उपयोग कर में पारित

पूर्ण ग्रंट फ़ाइल विन्यास होगा:

concat: { 
     options: { 
      sourceMap: true 
     }, 
     js: { 
      src: ['Modules/**/js/*.js'], 
      dest: 'script.js' 
     } 
    }, 
    babel: { 
     dist: { 
      options: { 
       sourceMap: true, 
       inputSourceMap: grunt.file.readJSON('script.js.map') 
      }, 
      src: [ 
       'script.js', 
      ], 
      dest: 'app.js' 
     } 
    } 

उदाहरण परियोजना: https://github.com/pra85/Grunt-Concat-Babel-Example

+2

यह काम करता है, धन्यवाद। दृश्य स्टूडियो कार्य धावक में इसे काम करने के लिए मुझे क्या करना था: inputSourceMap: function() { अगर (grunt.file.exists ('../ concatinated-es6.js.map')) { वापसी grunt.file.readJSON ('concatinated-es6.js.map') } वापसी ''; }() अन्यथा कार्य सूची क्रैश हो जाएगी। – Todilo

+10

यह अधिकतर काम करता है, हालांकि ग्रंट फ़ाइल उत्पन्न होने से पहले स्रोत मानचित्र को पढ़ने की कोशिश कर रही थी। इसे ठीक करने के लिए, मैंने एक कस्टम कार्य पंजीकृत किया जो कि कॉन्सट और बेबेल के बीच चलाया जाता है जो 'इनपुटसोर्समैप' विकल्प को लेबल कॉन्फ़िगरेशन में जोड़ता है। मेरी Gruntfile.js को इस तरह कुछ दिखाना: http://jsbin.com/rijazetaxe/3/edit?js – BenJamin

+0

[बेबेल स्रोत कोड] के अनुसार (https://github.com/babel/babel/blob/e44cef34734b59d26b2f090acd7ab16d5570b05c/ पैकेज/बेबेल-कोर/src/transformation/normalize-file.js # L29), स्रोत मानचित्र जेसन को पार्स करना अनदेखा है। जब तक 'inputSourceMap' सच है, तब तक बेबेल हमेशा अनुरूप आउटपुट से स्रोत मानचित्र टिप्पणी को पार्स करेगा। इससे भी बदतर, यह किसी भी मूल्य को अनदेखा कर देगा यदि उसे स्रोत मानचित्र टिप्पणी मिलती है, जो हमेशा यहां मामला है। नतीजतन, यह संभवतः आप जो भी उम्मीद करेंगे वह नहीं करेगा। – user8808265

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