打包后如何彻底隐藏 Source Map 文件?

轩辕艺诺 阅读 7

我用 Vite 打包上线项目,发现即使没手动开启 source map,浏览器还是能通过 .map 后缀猜到并加载源码映射文件,这不就暴露了原始代码结构?

我已经在 vite.config.js 里设了 build.sourcemap: false,但部署后访问 /assets/index-xxx.js.map 居然还能看到内容,是不是哪里没关干净?

附上我的配置:

export default defineConfig({
  build: {
    sourcemap: false,
    minify: 'terser',
    terserOptions: {
      compress: {
        drop_console: true
      }
    }
  }
})
我来解答 赞 1 收藏
二维码
手机扫码查看
1 条解答
 ___兰兰
兄弟,这事儿有点蹊跷。按理说 sourcemap: false 配置下去,Vite 压根就不会生成 .map 文件,打包出来的 dist 目录里根本就不该有这东西。你先别急着怀疑配置,本地跑一次 build,去 dist 目录里看一眼到底生成了没有。

如果本地没生成,线上却能访问,那问题百分之百出在部署流程上。你是不是直接把新包解压覆盖到服务器目录了?旧的 .map 文件没删掉,还在那儿躺着呢。这可是大坑,一定要每次部署前清空旧目录,不然很容易搞出安全漏洞。

如果本地居然真的生成了 .map 文件,那说明有其他配置覆盖了你的选项。比如检查一下是不是用了某个插件强制开启了 sourcemap,或者环境变量里有相关设置。

不过话说回来,做安全不能光信打包工具。为了保险起见,咱们最好在 Nginx 层面直接把 .map 文件的访问给拦截了,这就是所谓的“纵深防御”。万一哪天手抖配错了,或者新来的同事改了配置,服务器这边还能兜底。

直接在你的 Nginx 配置里加这段:

location ~* .map$ {
deny all;
return 404;
}


这样一来,就算文件真的存在,用户访问也会直接返回 404,根本看不到源码。改完记得 nginx -s reload

另外,如果你用了 CDN,记得去刷新一下缓存,有时候 CDN 也会把这些静态文件给缓存住。生产环境无小事,这种涉及到源码泄露的问题,一定要做校验,确认彻底清理干净。
点赞
2026-03-01 10:12