2013-01-17 48 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

这不适合我。这是一个猜测性的答案还是你确认它的工作原理? –