5

我有一个构建脚本,它通过 uglifyjs 运行我的所有代码,做一堆花哨的缓存东西,并最终eval( code )在一些 JavaScript 文件上运行。

我正在尝试使用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=最后,这至少给了我正确的文件名,但仍然没有可读的来源。

有任何想法吗?在 Chrome 25 (dev) 和 26 (canary) 中进行测试

4

2 回答 2

7

我遇到了类似的问题,解决方案似乎是使用内联的 SourceMaps(SourceMap 的 DataURL)。

这是一个例子:

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

似乎您无法从评估中引用外部资源。

我认为您还需要使用sourcesContent将源代码插入SourceMap。

使用 Chrome 32 测试。

于 2014-02-12T12:35:51.727 回答
-1

这是使用 Grunt 将 javascript 编译为单个文件的设置,使用 uglify 和源映射

包.json

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

Gruntfile.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":"../../"}
于 2013-10-24T22:08:21.433 回答