2015-04-18 60 views
3

中時,局部變量名稱映射在開發工具中不起作用我正在使用grunt-contrib-uglify插件來壓縮用於生產的javascript源文件。當mangle:true設置在grunt-contrib-uglify

當我嘗試在chrome的dev-tools(或firefox's)中調試一個函數時,就會出現這個問題。

我在uglify任務配置中設置了mangle:true(默認值)Gruntfile.js和uglifyjs mangles(縮短和重命名)生成的代碼中的變量名稱。

這些變量未正確映射到其原始局部變量名稱。所以調試非常痛苦。

任何想法解決這個問題?

下面是我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 
+0

你可以嘗試調試你的代碼,當它沒有縮小,並在一切都ok了之後minify。 – jcubic

+1

@jcubic我需要通過源代碼映射調試縮小生產代碼。在製作中只會使用縮小的文件。源代碼僅在調試目錄中,僅用於調試目的。 – Dreamer

回答

1

類似的問題也在這裏問:Breakpoint debugging minfied/mangled/compiled variables

我跑了今天討論這個問題。 Chrome和Firefox似乎是一致的行爲,這表明它是源映射規範中的一個限制。

Chromium有這個公開問題:https://code.google.com/p/chromium/issues/detail?id=327092建議需要更新sourcemapping規範以適應此問題。

如果您在縮小代碼時使用了名稱修飾,或者代碼已經轉換(例如,編寫通過Babel的ES2015),則會出現此問題。似乎目前的解決方案是等待sourcemapping更新以處理這種轉換。