马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
前端定位线上题目的多种方案(不依靠 Sentry) 🛠️
一、构建时注入调试信息 🔧
1. 注入版本信息与 Git 提交哈希
Webpack 设置:
- // webpack.config.js
- const webpack = require('webpack');
- const gitRevision = require('child_process').execSync('git rev-parse --short HEAD').toString().trim();
- module.exports = {
- plugins: [
- new webpack.DefinePlugin({
- __VERSION__: JSON.stringify(`v1.0.0-${gitRevision}`)
- })
- ]
- };
复制代码 代码中利用:
- console.log('当前版本:', __VERSION__);
- // 输出:当前版本:v1.0.0-3a5b7d9e
复制代码 上风:
- 精准定位代码版本,联合 Git 汗青快速回溯题目
- 无需第三方工具,纯前端实现
2. 天生 Source Map 并选择性摆设
Webpack 生产设置:
- // webpack.config.js
- module.exports = {
- devtool: 'hidden-source-map', // 生成 Source Map 但不暴露给浏览器
- output: {
- sourceMapFilename: '[file].map[query]'
- }
- };
复制代码 调试流程:
- 构建时天生 .map 文件,但不上传至 CDN
- 报错时通过行号/列号(如 main.js:123:45)
- 本地利用 source-map 库剖析错误位置:
- npx source-map analyze main.js.map --line 123 --column 45
复制代码 上风:
- 安全:不袒露源码到生产情况
- 精准:还原压缩代码到源码位置
二、欣赏器端主动捕捉与上报 🌐
1. 全局错误监听
根本代码:
- window.addEventListener('error', (e) => {
- const errorInfo = {
- msg: e.message,
- file: e.filename,
- line: e.lineno,
- col: e.colno,
- stack: e.error?.stack,
- version: __VERSION__ // 构建时注入的版本
- };
-
- // 上报到自有API
- fetch('/api/log-error', {
- method: 'POST',
- body: JSON.stringify(errorInfo)
- });
- });
复制代码 增强方案(Promise 错误):
- window.addEventListener('unhandledrejection', (e) => {
- console.error('Unhandled Rejection:', e.reason);
- });
复制代码 2. Console 日记重定向
捕捉全部 console.log:
- const originalConsoleLog = console.log;
- console.log = (...args) => {
- originalConsoleLog(...args); // 保持原功能
- sendToServer('log', args); // 自定义上报
- };
复制代码 三、动态调试模式开关 🔌
1. URL 参数控制调试模式
代码示例:
- const urlParams = new URLSearchParams(location.search);
- const debugMode = urlParams.has('debug');
- if (debugMode) {
- localStorage.setItem('debug', 'true'); // 持久化调试状态
- console.log('调试模式已开启');
- }
- // 根据调试模式加载不同资源
- if (debugMode) {
- import('./src/dev-tools.ts'); // 加载调试工具
- }
复制代码 安全步调:
- 后端校验参数权限(如特定IP或Token)
- 生产情况默认潜伏调试入口
2. 情况变量区分构建模式
Vite 设置:
- // vite.config.js
- export default defineConfig(({ mode }) => ({
- define: {
- __DEBUG__: mode === 'development' // 开发模式下启用调试
- }
- }));
复制代码 代码中利用:
- if (__DEBUG__) {
- console.log('当前为调试模式,敏感操作已禁用');
- }
复制代码 四、本地 Source Map 调试方案 🔍
1. 欣赏器直接关联本地源码
步调:
- 构建时天生 source-map
- 在 Chrome DevTools 中设置:
- 打开 Sources 面板 → Overrides
- 映射网络资源到本地文件体系
结果:
2. VS Code 调试生产代码
设置 .vscode/launch.json:
- {
- "version": "0.2.0",
- "configurations": [
- {
- "type": "chrome",
- "request": "launch",
- "name": "Debug Production",
- "url": "http://localhost:3000?debug",
- "webRoot": "${workspaceFolder}/src",
- "sourceMaps": true,
- "sourceMapPathOverrides": {
- "webpack:///./*": "${webRoot}/*"
- }
- }
- ]
- }
复制代码 五、方案对比与选型发起 📊
方案实用场景长处缺点构建注入版本全部项目无第三方依靠,快速定位版本需自行实现错误网络Source Map 剖析必要精准定位生产错误安全可靠,还原源码位置需手动管理 .map 文件全局错误捕捉自有错误监控 体系完全可控,数据私有需后端支持,开辟资本较高动态调试模式告急题目排查机动开关,不影响平凡用户存在安全风险,需严酷权限控制欣赏器 Overrides前端开辟者本地调试直接修改生产代码,及时见效仅限本地利用,无法团队协作 六、终极总结 🎯
「构建时埋点 + 欣赏器捕捉 + 动态调试」三位一体:
- 通过构建工具注入版本和 Source Map,创建代码与报错的正确映射
- 利用全局错误监听实现自主上报,摆脱对 Sentry 的依靠
- 联合 URL 参数动态开启调试模式,安全高效排盘题目
一句话代价:
无需依靠 Sentry,通过前端工程化本领打造自闭环的线上题目定位体系,让每一次报错都“有迹可循、有版可查”。 🔍🚀
|