监控系统 配置sourceMap问题

什么是 Sourcemap

Sourcemap是一个信息文件,里面储存着代码转换前后的对应位置信息。它记录了转换压缩后的代码所对应的转换前的源代码位置,是源代码和生产代码的映射。Sourcemap主要解决在打包过程中,代码经过压缩、去空格以及babel编译转化后,由于代码之间差异性过大,造成无法debug的问题。 Sourcemap的作用是构建了处理前以及处理后的代码之间的一座桥梁,方便定位生产环境中出现bug的位置。因为现在的前端开发都是模块化、组件化的方式,在上线前对js和css文件进行合并压缩容易造成混淆。如果对这样的线上代码进行调试,肯定不切实际,sourcemap的作用就是能够让浏览器的调试面版将生成后的代码映射到源码文件当中,开发者可以在源码文件中debug,这样就会让程序员调试轻松、简单很多。

sourcemap文件提供了便利,但在生产环境,为了安全,建议关闭。因为通过.map文件和编译后代码可以很容易反编译出项目的源码,这样就相当于泄露了项目的代码。

sentry 配置SourceMap

在webpack.config.js配置 SentryWebpackPlugin插件

javascript 复制代码
const SentryWebpackPlugin = require("@sentry/webpack-plugin");

module.exports = {
  // other configuration
  configureWebpack: {
    plugins: [
      new SentryWebpackPlugin({
        include: ".", 
        ignore: ["node_modules", "webpack.config.js"],
        configFile: "sentry.properties",
      }),
    ],
  },
};

include:指定路径让sentry-cli来检测有没有.map与.js文件,如果有就会上传到sentry。

sentry 有强大的金主爸爸们的支持,可以打包后把source-map 打包上传到静态资源服务器,这种方法需要额外配置服务器,的确是一种不错的方法,即解决了安全性也解决错误上报反编译源码的问题

方案二:

就是每次上产环境后,把对应产出的.map 文件需要上传到监控系统中,这个也是一种解决方案,但是唯一的问题就是,没次上生产环境都需要手动上传文件,对开发不够友好,比较麻烦,程序员怎么能容忍呢?还有其他方案吗?

方案三:

约定大于配置

约定大于配置"是一种常见的开发原则,意味着在开发过程中,通过约定和标准来减少不必要的配置。这个原则强调了在开发过程中,通过约定和最佳实践来减少配置的复杂性和冗余。"约定大于配置"的原则可以帮助开发团队减少不必要的沟通和协商,提高开发效率和代码质量

如果内部给.map 重新修改了一名称,在内部约定名称,监控系统根据约定去读取.map是不是会更简单点?基于这个思路我们通过约定的方式自定义一个规则,通过每次打包修改 生成的sourceMap 名称依旧可以保证生产环境的代码安全,而且只需要监控系统依照之前的约定方式解析sourceMap文件名称依旧可以实现解析,而且不需要在另外部署cdn,也不用是每次上线后手动上传sourceMap

为此我们写了一个修改打包后的依赖包 rename-source-map 生产打包的时候只需修改一下 生成的Sourcemap 文件即可

javascript 复制代码
const webpackRenamePlugin=require('rename-source-map')
module.exports = defineConfig({
  transpileDependencies: true,
  productionSourceMap: true,
 
  configureWebpack: {
    //name: string 
    plugins: [new webpackRenamePlugin('_rename_')],
  },
})

生成文件名称的方式可以自定义一套规则生成,然后通过在监控系统和打包系统中引用即可,解决生产环境的下的反编译的问题。

相关推荐
子兮曰8 小时前
async/await高级模式:async迭代器、错误边界与并发控制
前端·javascript·github
恋猫de小郭8 小时前
2026 Flutter VS React Native ,同时在 AI 时代 VS Native 开发,你没见过的版本
android·前端·flutter
GIS之路10 小时前
ArcGIS Pro 中的 Notebooks 入门
前端
IT_陈寒12 小时前
React状态管理终极对决:Redux vs Context API谁更胜一筹?
前端·人工智能·后端
Kagol13 小时前
TinyVue 支持 Skills 啦!现在你可以让 AI 使用 TinyVue 组件搭建项目
前端·agent·ai编程
柳杉13 小时前
从零打造 AI 全球趋势监测大屏
前端·javascript·aigc
simple_lau13 小时前
Cursor配置MasterGo MCP:一键读取设计稿生成高还原度前端代码
前端·javascript·vue.js
睡不着先生13 小时前
如何设计一个真正可扩展的表单生成器?
前端·javascript·vue.js
天蓝色的鱼鱼13 小时前
模块化与组件化:90%的前端开发者都没搞懂的本质区别
前端·架构·代码规范
明君8799713 小时前
Flutter 如何给图片添加多行文字水印
前端·flutter