Сопоставление имен локальных переменных не работает в инструментах разработки, если в grunt-contrib-uglify установлено значение mangle:true.

Я использую плагин grunt-contrib-uglify для сжатия исходных файлов javascript для производства.

Проблема возникает, когда я пытаюсь отладить функцию в инструментах разработчика Chrome (или Firefox).

Я установил mangle:true (значение по умолчанию) в конфигурации задачи uglify в Gruntfile.js, и uglifyjs манипулирует (сокращает и переименовывает) имена переменных в созданном коде.

Эти переменные не сопоставляются должным образом с их исходными именами локальных переменных. Так что отладка очень болезненна.

Любые идеи, чтобы исправить это?

Ниже мой Gruntfile.js

/* global module */

module.exports = function (grunt) {

    grunt.initConfig({
        copy: {
            production: {
                files: [
                    {
                        expand: true,
                        cwd: "./development/js/",
                        src: "./*",
                        dest: "./production/js/debug/"
                    }
                ]
            }
        },

        uglify: {
            production: {
                options: {
                    sourceMap: true
                    /* mangle: false */
                },

                files: {
                    "./production/js/one.min.js": ["./development/js/one.js"],
                    "./production/js/two.min.js": ["./development/js/two.js"]
                    //"./production/js/app.js": ["./development/js/one.js" , "./development/js/two.js" ]
                }
            }
        }
    });

    // [STEP] Load required GRUNT plugins
    grunt.loadNpmTasks('grunt-contrib-copy');
    grunt.loadNpmTasks('grunt-contrib-uglify');

    // [STEP] Register tasks
    grunt.registerTask("default", ["copy:production", "uglify:production"]);
};

Моя структура каталогов в основном,

Project ROOT dir

--F-- package.json
--F-- Gruntfile.json

--D-- node_modules
--*---- * (module files folders)

--D-- development
--D---- js
--F------ one.js
--F------ two.js

--D-- production
--D---- js (generated from grunt)
--*------ * (generated files)
--D------ debug (generated from grunt)
--*-------- * (generated files)
--F---- index.html

person Dreamer    schedule 18.04.2015    source источник
comment
Вы можете попытаться отладить свой код, когда он не минимизирован, и после того, как все будет в порядке, минифицируйте его.   -  person jcubic    schedule 18.04.2015
comment
@jcubic Мне нужно отладить уменьшенный производственный код с помощью исходных карт. В производстве будут использоваться только минифицированные файлы. Оригинальный исходный код будет находиться в каталоге отладки только для целей отладки.   -  person Dreamer    schedule 18.04.2015


Ответы (1)


Аналогичный вопрос также задавался здесь: Отладка точки останова minfied/mangled/compiled переменных

Я столкнулся с этой проблемой сегодня. Кажется, это последовательное поведение в Chrome и Firefox, предполагая, что это ограничение в спецификации сопоставления источника.

Существует открытая проблема для Chromium: https://code.google.com/p/chromium/issues/detail?id=327092 предполагает, что необходимо обновить спецификацию исходного сопоставления, чтобы учесть это.

Эта проблема проявляется, если вы используете изменение имени при минимизации кода или если код транспилируется (например, при написании ES2015, прошедшего через Babel). Похоже, что на данный момент решение состоит в том, чтобы дождаться обновления исходного сопоставления для обработки такого рода преобразования.

person Mike Hopkins    schedule 02.12.2015