9

javascript エラーをサーバーに記録したいのですが、縮小された JS コードではスタックトレースが役に立ちません。そこで、GetsentryまたはRollbarを使用して適切なスタック トレースを表示することを考えていましたsourcemaps。しかし、そもそもソースマップを作成するのに苦労しています。

このエラーが発生しています

「src ファイルが空だったため、宛先 (_build/js/app.js) が書き込まれませんでした。」

ソース マップが正しく作成されると、別の問題が発生します。つまりrev、ファイルの名前が変更されます。また、縮小されていない連結ファイルを残す必要があります。

以下は私の gruntfile.js です (いくつかのビットを削除しました)。

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',
    ]);

};

アップデート


@Andyのソリューションを試してみましたが、それでも同じエラーが表示"Destination (_build/js/app.js) not written because src files were empty."され、ビルド中に以下のようにも表示されます

 uglify:
  { options:
   { sourceMap: true,
     sourceMapName: '_build/js/app.js.map' },
  js: { files: { '_build/js/app.js': [ '_build/js/app.js' ] } },
  generated:
   { files:
      [ { dest: 'dist\\js\\app.js',
          src: [ '.tmp\\concat\\js\\app.js' ] } ] } }

dest名前の由来は不明。私の出力フォルダは_build.

UPDATE2:
より良い解決策については、以下のリンクを参照してください
https://stackoverflow.com/a/20574196/148271

4

3 に答える 3

5

useminPrepare は、既存の uglify 構成を独自のものとマージしていますが、 の下にネストされていgeneratedます。したがって、uglifyのこの構成は私にとってはうまくいきます

grunt.initConfig({
  uglify: {
    generated: {
      options: {
        sourceMap: true
      }
    }
  }
});
于 2015-03-10T18:25:02.307 に答える
1

uglify のオプションは次のとおりです。

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

たとえば、GruntFile.js私は にある名前を使用しますpackage.json

sourceMap: true,
sourceMapName: 'dist/<%= pkg.name %>-<%= pkg.version %>.map'
于 2014-02-24T15:50:19.077 に答える