I'm building, minifying and generating sourcemaps of my app with webpack. Artifacts are sent to sentry.io with webpack-sentry-plugin.
The javascript code is run from localhost:8080/js/app.js
. It contains //# sourceMappingURL=app.js.map
at the end. Sourcemaps work correctly at Chrome devtools.
Sentry's Releases/Artifacts contain the following files:
js/app.js
js/app.js.map
Anyway, when Sentry logs an error, stacktrace is from the minified file. It's not using the sourcemaps.
What am I doing wrong in my setup? Or what other info should I give to get help?
The only workaround is to manually change the map URL to a public one (http://localhost:1234/file.map.js) and start a local webserver at this port.
Webpack bundles multiple source files to one single bundle file. In some cases, there can be multiple bundle files. But in both cases, if there is an error in one of the source files, it is difficult to track it down from browser console. Source maps connect the bundle file with corresponding source files.
Sentry supports demangling of transpiled, minified, and bundled JavaScript using source maps, which are JSON files that contain information about how to map your deployed code back to its original source(s). This lets you view source code context obtained from stack traces in its original, untransformed form.
The SourceMap HTTP response header links generated code to a source map, enabling the browser to reconstruct the original source and present the reconstructed original in the debugger.
I posted this question at forum.sentry.io and got the answer from a guy called @benvinegar.
Here is the thing: when sending a sourcemap/artifact, we provide the file and also a filename. The filename is meant to be the complete URL where the sourcemap would be located if it was uploaded to the host together with the minified JS files. That is: if our minified Javascript is located at www.example.com/js/app.js
, then the sourcemap/artifact filename must be www.example.com/js/app.js.map
. Otherwise, we can name it ~/js/app.js.map
if we want the sourcemap to apply to other situations like running the app at localhost:8080/js/app.js
.
As I'm using webpack-sentry-plugin
, it was just a matter of adding the following property to the plugin:
{
plugins: [
new SentryPlugin({
filenameTransform: filename => '~/' + filename
})
]
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With