Получение исходных карт, работающих с оцененным кодом
У меня есть скрипт сборки, который запускает весь мой код через uglifyjs, выполняет кучу интересных вещей для кеширования и, в конечном счете, запускает eval( code )
на некоторых файлах JavaScript.
Я пытаюсь запустить весь этот процесс с исходными картами, но я не могу заставить его работать, пока я использую 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)
2 ответа
У меня была похожая проблема, и решение, кажется, использует встроенные SourceMaps (DataURL SourceMap).
Вот пример:
eval("blah blah\n//@ sourceMappingURL=data:application/json;base64,...");
Похоже, вы не можете ссылаться на внешние ресурсы из eval.
Я думаю, что вы также должны использовать sourcesContent
вставить исходный код в SourceMap.
Протестировано с Chrome 32.
Вот настройка, использующая Grunt для компиляции javascript в один файл с помощью uglify с исходной картой.
package.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":"../../"}