27

Ich verwende concat, um JS-Dateien in eine Datei zusammenzufassen und uglify, um das JavaScript zu minimieren. Wie kann ich eine Quellmappendatei erstellen, die die Quell-JS-Dateien verwendet?Grunt concat + uglify mit Quellkarten

Mein aktueller gruntfile:

concat: { 
    options: { 
     // define a string to put between each file in the concatenated output 
     separator: ';' 
    }, 
    dist: { 
     // the files to concatenate 
     src: ['<%= config.src %>/js/**/*.js'], 
     // the location of the resulting JS file 
     dest: '<%= config.dist %>/js/main.js' 
    } 
}, 

uglify: { 
    dist: { 
     files: { 
      '<%= config.dist %>/js/main.min.js': ['<%= concat.dist.dest %>'] 
     } 
    } 
}, 

Antwort

48

Sie benötigen Quelle Karten auf beiden concat und uglify Aufgaben zu ermöglichen, und Sie müssen die sourceMapIn Option für die uglify Aufgabe angeben.

Hier ist ein Beispiel Grunzen config:

concat : { 
    options : { 
    sourceMap :true 
    }, 
    dist : { 
    src : ['www/js/**/*.js'], 
    dest : '.tmp/main.js' 
    } 
}, 
uglify : { 
    options : { 
    sourceMap : true, 
    sourceMapIncludeSources : true, 
    sourceMapIn : '.tmp/main.js.map' 
    }, 
    dist : { 
    src : '<%= concat.dist.dest %>', 
    dest : 'www/main.min.js' 
    } 
} 
+0

Diese Antwort hat geholfen, eine ähnliche Anforderung zu lösen (mapping ugify source, um die Quelle für einzelne Module zu benötigen). Vielen Dank! – jerome

+1

Das funktioniert für mich, außer dass die Zeilennummern in der endgültigen Karte falsch sind, wenn die minimierte js verwendet wird (die Chrome-Konsole zeigt beispielsweise auf Zeile 320 anstatt auf Zeile 290 für einen Fehler). Haben Sie eine Idee, warum das passiert? – Y0lk

+1

In meinem Fall werden die Quellkarten erzeugt, sind aber unbrauchbar. Wenn ich einen Haltepunkt setze, hört der Code dort nicht auf. Scheint wie ein allgemeines Problem von Uglifyjs, das noch nicht gelöst ist. – migg

-1

Per den grunt-contrib-uglify docs, können Sie sourcemap Generation als Teil des uglify Prozess ermöglichen.

Ihre uglify Config würde in etwa so aussehen:

uglify: { 
     dist: { 
      files: { 
       '<%= config.dist %>/js/main.min.js': ['<%= concat.dist.dest %>'] 
      }, 
      options: { 
       sourceMap: true 
     } 
    }, 
+1

Das funktioniert, wenn ich nur uglify verwenden würde, aber ich bin mit beiden und concat verunstalten. – user3483982