前端工程化 词条目录
前端Wiki/词条/Source Map

Source Map

定义打包产物与源码的映射表:压缩合并后的代码出错时,能定位回源码的行与列

生产环境的 JS 被压缩、合并、转换过,报错堆栈里只有「a.min.js:1:48273」这种位置,毫无调试价值。Source map 是一份 JSON 记录「产物位置 → 源码位置」的映射(mappings 字段用 VLQ 编码),浏览器/错误监控平台(Sentry)据此还原出源码位置与原始堆栈。

生产环境的安全讲究:不应该把 .map 直接公开(等于泄露源码)。三种做法:彻底不输出 map(彻底无法定位到源码)、仅本地保留不给浏览器加载(构建报错但能定位)、上传到错误监控平台(线上定位最佳实践)。开发环境用 eval-cheap-module-source-map 重编译最快。

JavaScript
// webpack 配置
module.exports = {
  // dev 模式:eval 包裹 + 模块级映射,重编译最快
  devtool: isDev ? 'eval-cheap-module-source-map' : false,
  production: {
    // 生产常见做法:生成 map 但不写到公开目录
    devtool: 'hidden-nosources-source-map',
  },
};

// vite.config.js
export default defineConfig({
  build: { sourcemap: true },   // 或 'hidden'(不写 sourceMappingURL 注释)
});

/* 单独的产物 foo.js 最后一行带注释:
 * //# sourceMappingURL=foo.js.map
 * 浏览器/监控平台读到该注释加载 map 还原堆栈 */
⚠ 常见误区
🔗 相关词条Webpack代码压缩与 Tree ShakingVite
← 返回来源章节代码压缩与 Tree Shaking