hidden-source-map 通过不写入 //# sourcemappingurl 注释,使浏览器不自动加载 .map 文件、sources 面板不显示源码;但 .map 文件仍独立生成并部署,供 sentry 等服务端解析错误堆栈,还原原始文件路径与行列号。

hidden-source-map 的核心作用是:让错误堆栈中保留原始行号信息(可被 Sentry 等监控系统解析),但浏览器 DevTools 的 Sources 面板不显示原始源码,也不自动加载 .map 文件。
它怎么做到“有行号、无源码”?
关键在于构建产物中不写入 //# sourceMappingURL=xxx.js.map 这行注释。浏览器因此完全不知道 .map 文件的存在,不会发起请求,Sources 面板自然看不到原始文件结构;但 .map 文件本身仍被生成并部署到线上——只要错误监控服务端拿到报错时的 script URL、lineno、colno,就能用该 .map 文件做映射还原,得到真实的源文件路径和行列号。
下载 Comet AI 浏览器,体验由 Perplexity AI 驱动的革命性上网方式。内置 AI 助手可实时总结网页、跨标签页对比信息、自动执行任务。告别繁琐操作,让 AI 成为你的浏览副驾,大幅提升研究与工作效率。支持 Windows、macOS、Android 和 iOS。
Vue CLI 和 Vite 中的正确配置
-
Vue CLI:在
vue.config.js中设置devtool: 'hidden-source-map' -
Vite:在
vite.config.ts中配置build.sourcemap: 'hidden' - 确保构建产物目录(如 dist)里包含 .js.map 文件,且与 .js 文件同级、同名(如
app.js对应app.js.map)
为什么它适合生产环境?
它解决了两个现实矛盾:
- 不暴露源码:没有 sourceMappingURL 注释,普通用户无法通过 DevTools 查看或下载原始代码
- 保留调试能力:监控系统(如 Sentry、自建错误平台)仍能精准定位到
src/views/Home.vue:42这样的真实位置,而非app.js:12345 - 避免内联方案带来的包体积膨胀(inline-source-map 会把 map 内容 base64 编码塞进 JS,增大几十 KB)
常见踩坑点
- .map 文件没随 JS 一起上线——Nginx/Apache 需允许
.map后缀的静态资源访问,且返回正确的 MIME 类型(application/json) - CDN 缓存了旧版本 JS,但没同步更新对应 .map 文件——必须保证 JS 与 .map 版本严格一致
- 错误上报时未携带
scriptUrl或lineno/colno——后端解析时缺少关键输入,无法调用originalPositionFor










