标准答案

  1. Source Map 可以帮助浏览器或错误监控把构建后的行列号还原到源码位置。
  2. 开发环境通常选择映射更完整、调试体验更好的类型,即使构建慢一点也能接受。
  3. 生产环境要重点考虑源码泄露、构建耗时、错误定位精度和监控平台接入。
  4. 常见策略是生产构建生成 map,但不公开给普通用户访问,而是上传到 Sentry 等平台后删除公开文件。
  5. 如果完全关闭 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 对齐,监控平台无法正确映射。

作者信息