2013-01-17 95 views
5

我有一個構建腳本,它通過uglifyjs運行我的所有代碼,做了一堆奇特的緩存內容,並最終在某些JavaScript文件上運行eval(code)獲取使用評估代碼的源代碼地圖

我試圖讓這個整個過程與source maps一起運行,但我似乎無法讓它工作,只要我使用eval。如果我使用<script src="...">直接鏈接到文件,它工作正常。

在我eval的代碼,我有:

code, blah blah blah 
//@ sourceMappingURL=/cache/618a67795c7460184bd9b99020cbb9fd.map 

,然後在.map文件,我有:

{ 
     "version" : 3 
    , "file"  : "618a67795c7460184bd9b99020cbb9fd.map" 
    , "sources" : ["/js/Parallax-JS/js/parallax-2.js"] 
    , "names" : [ 
      "a" 
     , "bunch" 
     , "of" 
     , "variable" 
     , "names" 
    ] 
    , "mappings" : "... LONG MAP ..." 
} 

我試圖把//@ sourceURL=末代替,並且在最少給我正確的文件名,但仍然沒有可讀的來源。

任何想法?在鉻25(DEV)和26(金絲雀)

回答

-1

這裏測試使用咕嚕編譯使用與源映射

的package.json

"src": { 
    "js": "src/js" 
}, 
"dest": { 
    "js": "bin/js" 
} 

Gruntfile醜化JavaScript來單個文件的設置。 JS

grunt.initConfig({ 
    /** 
    * Loading in the package file to read source and destination directories 
    */ 
    pkg: grunt.file.readJSON('package.json'), 
    uglify: { 
    options: { 
     banner: '/* all.min.js <%= grunt.template.today("dd-mm-yyyy") %> */\n', 
     sourceMap: '<%= pkg.dest.js %>/all.min.js.map', 
     sourceMappingURL: 'all.min.js.map', 
     sourceMapRoot: '../../', 
     mangle: false 
     /*mangle: { 
      except: ['jQuery'] 
     }*/ 
    }, 
    js: { 
     src: [ 
      '<%= pkg.src.js %>/**/*.js' 
     ], 
     dest: '<%= pkg.dest.js %>/all.min.js' 
    } 
    } 
}; 

grunt.loadNpmTasks('grunt-contrib-uglify'); 
grunt.registerTask('min', ['uglify']); 

它創建下列文件:

all.min的.js

/* all.min.js 04-10-2013 */ 
angular.module("App",[]) 
//# sourceMappingURL=all.min.js.map 

all.min.js.map

{"version":3,"file":"bin/js/all.min.js","sources":["src/js/App.js"],"names":["angular","module"],"mappings":"AAeAA,QAAQC","sourceRoot":"../../"} 
5

我也有類似問題和解決方案似乎是使用內聯SourceMaps(一個SourceMap的DataURL)。

下面是一個例子:

eval("blah blah\n//@ sourceMappingURL=data:application/json;base64,...");

好像你不能從一個eval引用外部資源。

我想你還需要使用sourcesContent來將源代碼插入到SourceMap中。

使用Chrome 32測試。

+0

我還是有點困惑。你能提供一個這樣的工作jsfiddle嗎?謝謝 – AjaxLeung

+0

這不適合我。這是一個猜測性的答案還是你確認它的工作原理? –