2014-02-24 8 views
9

Ich möchte JavaScript-Fehler auf dem Server protokollieren, aber der Stacktrace ist nicht mit minimized JS-Code nützlich. Also habe ich überlegt, entweder Getsentry oder Rollbar zu verwenden, was einen korrekten Stack-Trace mit Hilfe von sourcemaps zeigt. Aber ich habe Mühe, Quellkarte an erster Stelle zu erstellen.Uglify mit SourceMaps bei der Verwendung von grunt usemin und rev

Ich erhalte diesen Fehler

"Destination (_build/js/app.js) nicht geschrieben, weil src Dateien leer waren."

Sobald die Quellkarte ordnungsgemäß erstellt wurde, gibt es ein weiteres Problem, d. H. rev wird die Datei umbenennen. Ich muss auch die nicht verknüpfte verkettete Datei belassen.

Im Folgenden meine gruntfile.js ist (ich einige Bits aus ihm entfernt haben.)

module.exports = function(grunt) { 

    grunt.initConfig({ 
     pkg: grunt.file.readJSON('package.json'), 
     clean: { 
      jsFolders: { 
       src: [ 
        '_build/js/ui', 
        '_build/js/vendor', 
        '_build/js/app', 
        '_build/js/*templates.js' 
       ] 
      }, 
      build: { 
       src: ['_build/**/*'] 
      } 
     }, 

     copy: { 
      build: { 
       files: [{ 
        expand: true, 
        src: [ 
         'index.html', 
         'img/**/*', //includes web.cofig also. 
         'img/**/*.svg', 
         '!img/**/*.psd', 
         'js/**/*', //includes web.cofig also. 
         'css/**/*', //includes web.cofig also. 
         '*.png', 
         'favicon.ico' 
        ], 
        dest: '_build/' 
       }] 
      }, 
     }, 

     rev: { 
      option: { 
       algorithm: 'sha1', 
       length: 4 
      }, 
      all: { 
       files: { 
        src: [ 
         '_build/**/*.{js,css,eot,ttf,woff}' 
        ] 
       } 
      } 
     }, 

     useminPrepare: { 
      html: ['_build/index.html'] 
     }, 

     usemin: { 
      html: [ 
       '_build/index.html' 
      ], 
      css: [ 
       '_build/css/**/*.css' 
      ] 
     }, 

     uglify: { 
      options: { 
       sourceMap: '_build/js/app.js.map', 
      }, 
      js: { 
       files: { 
        '_build/js/app.js': ['_build/js/app.js'] 
       } 
      } 
     }, 

     cssmin: { 
      minify: { 
       expand: true, 
       cwd: '_build/css/', 
       src: '*.css', 
       dest: '_build/css/' 
      } 
     }, 
    }); 

grunt.registerTask('build', [ 
     'clean:build', 
     'handlebars', 
     'compass', 
     'autoprefixer', 
     'copy:build', 
     'useminPrepare', 
     'concat', 
     'uglify', 
     'cssmin', 
     'clean:jsFolders', 
     'rev', 
     'usemin', 
    ]); 

}; 

UPDATE


@ Lösung Andy versucht, es zeigt immer noch die selbe Fehler "Destination (_build/js/app.js) not written because src files were empty." und es sagt auch unten während des Aufbaus

Weiß nicht wo es hingehört dest name von. Mein Ausgabeordner ist _build.

UPDATE2:
auf unter Links finden Sie eine bessere Lösung
https://stackoverflow.com/a/20574196/148271 https://github.com/gruntjs/grunt-contrib-uglify/issues/39#issuecomment-14856100

+0

also, was ist die eigentliche Lösung? – JobaDiniz

Antwort

1

Die Optionen für uglify sind:

sourceMap: true, 
sourceMapName: 'path/to/name.map' 

Verwenden Sie zum Beispiel in meinem GruntFile.js ich den gefunden Name in package.json:

sourceMap: true, 
sourceMapName: 'dist/<%= pkg.name %>-<%= pkg.version %>.map' 
+0

Ich habe die Frage mit den Ergebnissen der Implementierung Ihrer Lösung aktualisiert – IsmailS

+1

Dies funktionierte teilweise, wenn ich meinen Ausgabeordner zu 'dist' anstelle von' _build' änderte. Es scheint also, dass es einen hart codierten Namen 'dist' in' usemin' gibt. Die verbleibenden Probleme sind 1. Die nicht verknüpfte Datei befindet sich im '.tmp'-Ordner und bleibt nicht neben der min-Datei im' js'-Ordner. 2. Wenn ich die generierte Quellkarte öffne und sehe, bezieht sie sich auf die Datei "app.js" anstelle des 'rev'ed' Namens, d. H.' .app.js'. Versuche nun, diese zu umgehen. – IsmailS

+0

Haben Sie Glück, dass der Name nicht im unteren Bereich der Datei .app.js vorhanden ist? – balteo

5

useminPrepare verschmilzt die bestehende uglify Config mit seinem eigenen, sondern unter generated verschachtelt. Daher funktioniert diese Konfiguration für uglify für mich

grunt.initConfig({ 
    uglify: { 
    generated: { 
     options: { 
     sourceMap: true 
     } 
    } 
    } 
}); 
+0

Danke. Ich war ein wenig verwirrt, wo das Uglify: Generated herkam – neolaser