2015-09-14 21 views
9

Tüm js6 dosyalarını bir klasöre nakletmek ve birleştirilmiş bir tek dosyayla (js5) orijinal es6 dosyalarına çalışan bir çalışma ile sonlandırmak için homurdanı ve babeli kullanarak çalışıyorum. Bununla birlikte, sourcemapping çalışmıyor. Aşağıda My babel, concat ayarları:Grunt babel birden çok dosya ve kaynak haritalamayı koruyun

"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" 

ben js dosyaları ve src haritalar (tmp dizin) bir sürü öncelikle bir klasör ile biten ediyorum. Ancak onları tek bir dosyada birleştirmek tamamen kaynak haritalamayla uğraşır.

Fikirler? Ayrıca, bir şekilde geçici dosyaların oluşturulmasını ve sonucun kısa sürede sonuca bağlanmasını nasıl engelleyebilirim?

+0

Sen concat görevi çalıştırabilir İlk ve daha sonra tek dosya üzerinde kaynak harita seçeneği ile –

+0

@ PrayagVerma seçeneği ile babel görevini çalıştırın, bu da es6 kodunu ayıklayabildiğimden biraz daha iyi hale getiriyor. Orijinal dosyadan değil, daha iyi. – Todilo

+0

Baban için bir inputSourceMap seçeneği var gibi görünüyor ama işe almak benim için önemsiz görünmüyor. – Todilo

cevap

14

Görev sırasını tersine çevirmek bunu çok daha kolaylaştıracaktır. JS dosyaları üzerinde ilk olarak concat görevini çalıştırın. Aşağıdaki seçeneklerden

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

ile daha önce concat görev yarattığı tek bir dosya o koşmak babel görev sonrasında İşte script.js.map dosya concat görevinin oluşturduğu kaynak haritası dosyasının adıdır. inputSourceMap seçenek kaynağı harita nesnesi excepts olarak,

tam Grunt dosya yapılandırması olacağını grunt.file API readJSON yöntemi kullanmanın geçmek:

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' 
     } 
    } 

Örnek proje: https://github.com/pra85/Grunt-Concat-Babel-Example

+2

Bu işler, teşekkür ederim. Görsel stüdyosunda çalışmayı başarmak için ne yapmam gerekiyordu: inputSourceMap: function() { if (grunt.file.exists ('../ concatinated-es6.js.map')) { grunt.file.readJSON ('concatinated-es6.js.map') } ''; }() Aksi takdirde görev listesi kilitlenir. – Todilo

+10

Bu Çoğunlukla işe yaradı, Grunt dosyası kaynak haritayı okunmadan önce okumaya çalışmayı sürdürdü. Bunu düzeltmek için, babat yapılandırmasına 'inputSourceMap' seçeneğini ekleyen concat ve babel arasında çalışan özel bir görev kaydettim. Benim Gruntfile.js benim gibi bir şey bakmak: http://jsbin.com/rijazetaxe/3/edit?js – BenJamin

+0

[Babil kaynak koduna] göre (https://github.com/babel/babel/blob/e44cef34734b59d26b2f090acd7ab16d5570b05c/ paketleri/babel-core/src/transformation/normalize-file.js # L29), kaynak haritasının ayrıştırılması json uneeded. Babel, kaynak harita yorumunu her zaman concat çıkışından, yani inputSourceMap'in doğru olduğu sürece ayrıştırır. Daha da kötüsü, bir kaynak harita yorumu bulması durumunda, buradaki her zaman geçerli olan herhangi bir değeri göz ardı edecektir. Sonuç olarak, bu muhtemelen beklediğiniz şeyi yapmayacaktır. – user8808265