打包后如何彻底隐藏 Source Map 文件?
我用 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
}
}
}
})
sourcemap: false配置下去,Vite 压根就不会生成 .map 文件,打包出来的 dist 目录里根本就不该有这东西。你先别急着怀疑配置,本地跑一次 build,去 dist 目录里看一眼到底生成了没有。如果本地没生成,线上却能访问,那问题百分之百出在部署流程上。你是不是直接把新包解压覆盖到服务器目录了?旧的 .map 文件没删掉,还在那儿躺着呢。这可是大坑,一定要每次部署前清空旧目录,不然很容易搞出安全漏洞。
如果本地居然真的生成了 .map 文件,那说明有其他配置覆盖了你的选项。比如检查一下是不是用了某个插件强制开启了 sourcemap,或者环境变量里有相关设置。
不过话说回来,做安全不能光信打包工具。为了保险起见,咱们最好在 Nginx 层面直接把 .map 文件的访问给拦截了,这就是所谓的“纵深防御”。万一哪天手抖配错了,或者新来的同事改了配置,服务器这边还能兜底。
直接在你的 Nginx 配置里加这段:
这样一来,就算文件真的存在,用户访问也会直接返回 404,根本看不到源码。改完记得
nginx -s reload。另外,如果你用了 CDN,记得去刷新一下缓存,有时候 CDN 也会把这些静态文件给缓存住。生产环境无小事,这种涉及到源码泄露的问题,一定要做校验,确认彻底清理干净。