I have a build script that runs all my code through uglifyjs, does a bunch of fancy caching stuff, and ultimately runs eval( code )
on some JavaScript files.
I'm trying to get this whole process up and running with source maps, but I can't seem to get it working as long as I'm using eval
. If I link to the files directly using <script src="...">
it works fine.
In my eval
code, I have:
code, blah blah blah
//@ sourceMappingURL=/cache/618a67795c7460184bd9b99020cbb9fd.map
and then in that .map
file, I have:
{
"version" : 3
, "file" : "618a67795c7460184bd9b99020cbb9fd.map"
, "sources" : ["/js/Parallax-JS/js/parallax-2.js"]
, "names" : [
"a"
, "bunch"
, "of"
, "variable"
, "names"
]
, "mappings" : "... LONG MAP ..."
}
I've tried putting //@ sourceURL=
at the end instead, and that at least gives me the correct file name, but still no readable source.
Any ideas? Testing in Chrome 25 (dev) and 26 (canary)
I have a build script that runs all my code through uglifyjs, does a bunch of fancy caching stuff, and ultimately runs eval( code )
on some JavaScript files.
I'm trying to get this whole process up and running with source maps, but I can't seem to get it working as long as I'm using eval
. If I link to the files directly using <script src="...">
it works fine.
In my eval
code, I have:
code, blah blah blah
//@ sourceMappingURL=/cache/618a67795c7460184bd9b99020cbb9fd.map
and then in that .map
file, I have:
{
"version" : 3
, "file" : "618a67795c7460184bd9b99020cbb9fd.map"
, "sources" : ["/js/Parallax-JS/js/parallax-2.js"]
, "names" : [
"a"
, "bunch"
, "of"
, "variable"
, "names"
]
, "mappings" : "... LONG MAP ..."
}
I've tried putting //@ sourceURL=
at the end instead, and that at least gives me the correct file name, but still no readable source.
Any ideas? Testing in Chrome 25 (dev) and 26 (canary)
Share Improve this question asked Jan 17, 2013 at 9:13 user578895user578895 1- This seems to offer a solution: kybernetikos.github.io/jsSandbox/srcmaps/dynamic.html - but I want to state I did not personally try it. – Sebastian N. Commented May 8, 2023 at 13:40
2 Answers
Reset to default 7I had a similar problem and the solution seem to be using an inlined SourceMaps (DataURL of a SourceMap).
Here is an example:
eval("blah blah\n//@ sourceMappingURL=data:application/json;base64,...");
Seems like you can't reference external resources from an eval.
I think you also need to use sourcesContent
to insert the source code into the SourceMap.
Tested with Chrome 32.
Here is a setup using Grunt to pile javascript to single file using uglify with a source map
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']);
Which creates the following files:
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":"../../"}
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745319572a4622380.html
评论列表(0条)