React生产构建移除Source Maps后Sentry无法识别问题排查
Sentry无法识别已上传的Source Maps问题排查与修复
核心问题定位
你当前的配置中,rewrite: false是导致Sentry无法关联Source Maps的关键原因。CRA构建的生产bundle文件末尾会带有//# sourceMappingURL=xxx.map的注释,Sentry需要通过rewrite操作完成两件事:
- 将bundle中的sourcemap引用替换为Sentry平台上的对应地址
- 调整错误栈中的文件路径,使其与上传的Source Maps的路径匹配
如果关闭rewrite,Sentry无法完成路径映射,自然无法解析源码。
快速修复(无需eject)
1. 修改Sentry上传脚本的rewrite配置
更新scripts/sentry.js中的上传参数:
await cli.releases.uploadSourceMaps(release, { include: ['build/static/js'], urlPrefix: '~/static/js', rewrite: true, // 改为true,开启路径重写 });
2. 验证Release标识一致性
确认Sentry后台显示的Release名称,与SDK初始化时传入的release值完全一致(包括woodhouse@前缀)。可以在构建时添加日志打印,确保环境变量REACT_APP_SENTRY_RELEASE正确传递:
// 在sentry.js和SDK初始化代码中添加 console.log('当前Release:', process.env.REACT_APP_SENTRY_RELEASE);
3. 检查Bundle与Source Map的文件名匹配
上传前确认build/static/js下的bundle文件(如main.xxx.js)末尾的sourcemap注释,与对应的.map文件名完全一致,避免因文件名不匹配导致关联失败。
进阶方案:使用@sentry/webpack-plugin(可选eject)
如果希望更自动化、安全地处理Source Maps(避免bundle中留下sourcemap引用),可以eject后使用Sentry官方webpack插件,配置hidden-source-map并自动删除构建后的Source Maps:
1. 安装依赖
npm install @sentry/webpack-plugin --save-dev
2. 修改生产环境webpack配置(config/webpack.prod.js)
const SentryWebpackPlugin = require('@sentry/webpack-plugin'); module.exports = { // ... 其他配置 devtool: 'hidden-source-map', // 生成不被bundle引用的Source Map plugins: [ // ... 已有插件 new SentryWebpackPlugin({ authToken: process.env.SENTRY_AUTH_TOKEN, org: '你的Sentry组织名称', project: '你的Sentry项目名称', release: process.env.REACT_APP_SENTRY_RELEASE, include: './build/static/js', urlPrefix: '~/static/js', deleteAfterCompile: true, // 编译完成后自动删除本地Source Maps }), ], };
3. 简化构建命令
删除原有的release和postrelease脚本,改为:
"scripts": { "build": "export REACT_APP_SENTRY_RELEASE=woodhouse@$(git rev-parse --short HEAD) && react-scripts build" }
额外检查项
- 确认Sentry SDK初始化时的
DSN和environment配置正确,且与上传Source Maps时的项目环境一致 - 上传Source Maps时,确保
include路径覆盖了所有生成的JS chunk文件,避免遗漏
内容的提问来源于stack exchange,提问作者Jim Vercoelen
相关产品推荐
相关产品推荐

