标准答案
- Source Map 可以帮助浏览器或错误监控把构建后的行列号还原到源码位置。
- 开发环境通常选择映射更完整、调试体验更好的类型,即使构建慢一点也能接受。
- 生产环境要重点考虑源码泄露、构建耗时、错误定位精度和监控平台接入。
- 常见策略是生产构建生成 map,但不公开给普通用户访问,而是上传到 Sentry 等平台后删除公开文件。
- 如果完全关闭 Source Map,线上错误只能看到压缩产物位置,排障成本会明显升高。
题目解析
Source Map 的价值在事故发生时才会非常明显。线上报错如果只指向 app.8f3a1c.js 的第 1 行第 300000 列,基本无法快速定位。
生产环境的风险在于源码暴露。完整 source map 可能包含业务源码、注释、路径甚至部分敏感信息,所以不能简单把 map 文件随静态资源一起公开。
合理做法通常是让构建产出 map,上传到错误监控或内部符号服务,再控制外部访问。这样既能保留定位能力,也能降低源码暴露面。
代码示例
生产环境常见策略是生成独立 map,但不让用户直接下载。
Text
development:
eval-source-map / cheap-module-source-map
production:
hidden-source-map
upload map files to error monitoring
block public access to *.map常见误区
- 生产环境直接公开完整 source map,导致源码可被下载。
- 为了安全完全关闭 source map,结果线上错误无法还原源码位置。
- 没有把构建版本、release、commit sha 和 source map 对齐,监控平台无法正确映射。