StackTrace.fromError() triggers a network request that results in a 404 and fails while trying to JSON.parse() the result
nfriend opened this issue · 1 comments
Current Behavior
I'm giving stacktrace-js a try in an Angular application that is bundled using webpack. stacktrace-js (or more specifically, stacktrace-gps) is trying to get a .map file from my web server that doesn't exist. Currently, my webpack setup outputs two files at the root of my app's directory:
myapp.js
myapp.js.map
myapp.js.map looks something like this:
{
"version":3,
"sources": [
"webpack:///webpack/bootstrap bb7845f87150726ec08d",
"webpack:///./~/moment/moment.js",
"webpack:///./~/jquery/src/core.js",
"webpack:///./~/css-loader/lib/css-base.js",
"webpack:///./~/style-loader/lib/addStyles.js",
"webpack:///./~/angular/index.js",
"webpack:///./~/jquery/src/jquery.js"
...
],
"names":[],
"mappings": ";AAAA;AACA;;AAEA;AACA ... "
}
My webpack config that generates this map file looks like this:
{
entry: ['./src/entry'],
output: {
filename: 'myapp.js'
},
devtool: 'source-map',
...
}
In my app, I'm trying to use StackTrace.fromError to catch global errors and send them to my web server to be logged:
StackTrace.fromError(exception).then(stackframes => {
StackTrace.report(
stackframes,
'api/error/myapp',
'Encountered unhandled error in myapp'
);
}).catch(err => {
$log.error('Unable to get stacktrace from Error object for reporting purposes. '
+ 'No error information has been sent to the server.');
});When an error occurs in my application, stacktrace-js attempts to make a call to https://localhost/myapp/angular-cache.js.map, which doesn't exist. (My app is hosted at https://localhost/myapp/.) As a result, my web server returns a 404 page; stacktrace-gps tries to parse this HTML as JSON (in _parseJson(string) on line 59) and throws an error:
stacktrace-gps.js:59 Uncaught (in promise) SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at _parseJson (stacktrace-gps.js:59)
at stacktrace-gps.js:237
at <anonymous>
It's very possible that this is an issue with my setup, but I'm not sure where to begin. My webpack setup seems fairly standard, and I can't seem to find any information online that's relevant to the error I'm getting.
Expected Behavior
When an error occurs, stacktrace-js shouldn't trigger network calls to files that don't exist on my webserver. The only .map file that exists on my web server is myapp.map.js - I would expect that stacktrace-gps would only make a request to get this file. I also don't seem to see a way to configure the name of the .map.js file that stacktrace-gps should fetch from my web server.
Your Environment
- stacktrace.js version: 2.0.0
- Browser Name and version: Chrome 59/Firefox 54
- Operating System and version (desktop or mobile): Windows 10
I've discovered this issue is the result of one of my dependencies (angular-cache) including its own sourceMappingURL comment in its output:
//# sourceMappingURL=angular-cache.js.mapIf I remove this comment from my build's output .js file, this issue seems to be resolved. I'll close this issue since this doesn't seem to be an issue with stacktrace-js (although perhaps this should be mentioned in a FAQ or Troubleshooting section?).
For anyone else with this issue - you should be able to resolve this issue with this plugin: https://github.com/webpack-contrib/source-map-loader. Unfortunately I haven't been able to get this to work due to this issue (in one of its dependencies): mozilla/source-map#247.