UNPKG

argos-tracker

Version:

A lightweight frontend tracking SDK for data collection and reporting

456 lines (343 loc) 7.99 kB
# Argos Tracker 一个轻量级的前端埋点数据收集和上报SDK,支持自动埋点和手动埋点,提供完整的用户行为追踪解决方案。 ## 特性 - 🚀 **轻量级**: 打包后体积小,对页面性能影响最小 - 📊 **多种埋点方式**: 支持自动埋点和手动埋点 - 🔄 **多种上报策略**: 实时上报、批量上报、页面卸载时上报 - 💾 **离线缓存**: 网络异常时自动缓存,网络恢复后重新上报 - 🛡️ **错误监控**: 自动收集JavaScript错误、Promise异常、资源加载错误 - 📱 **设备信息**: 自动收集设备类型、屏幕分辨率、用户代理等信息 - 🔧 **TypeScript支持**: 完整的类型定义,提供更好的开发体验 - 🧪 **完整测试**: 高测试覆盖率,保证代码质量 ## 安装 ```bash npm install argos-tracker ``` 或者使用 yarn: ```bash yarn add argos-tracker ``` ## 快速开始 ### 基础用法 ```javascript import { ArgosTracker } from 'argos-tracker'; // 初始化追踪器 const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', userId: 'user-123', debug: true // 开发环境建议开启 }); // 追踪自定义事件 tracker.track('button_click', { button_id: 'submit-btn', page: 'checkout' }); // 追踪页面访问 tracker.trackPageView({ campaign: 'summer-sale' }); // 追踪用户行为 tracker.trackUserAction('form_submit', { form_type: 'contact', fields: 3 }); ``` ### 使用CDN ```html <script src="https://unpkg.com/argos-tracker/dist/index.js"></script> <script> const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id' }); tracker.track('page_load'); </script> ``` ## 配置选项 ```typescript interface TrackerConfig { /** 上报地址 */ reportUrl: string; /** 应用ID */ appId: string; /** 用户ID */ userId?: string; /** 上报方式 */ reportMethod?: 'immediate' | 'batch' | 'beacon'; /** 批量上报的最大条数 */ batchSize?: number; /** 批量上报的时间间隔(ms) */ batchInterval?: number; /** 是否开启调试模式 */ debug?: boolean; /** 自定义请求头 */ headers?: Record<string, string>; /** 请求超时时间(ms) */ timeout?: number; /** 是否自动收集页面访问事件 */ autoTrackPageView?: boolean; /** 是否自动收集点击事件 */ autoTrackClick?: boolean; /** 是否自动收集错误事件 */ autoTrackError?: boolean; } ``` ### 默认配置 ```javascript { reportMethod: 'batch', batchSize: 10, batchInterval: 5000, debug: false, timeout: 10000, autoTrackPageView: true, autoTrackClick: false, autoTrackError: true, headers: { 'Content-Type': 'application/json' } } ``` ## API 文档 ### 事件追踪 #### `track(eventName, properties?)` 追踪自定义事件。 ```javascript tracker.track('product_view', { product_id: 'abc123', category: 'electronics', price: 299.99 }); ``` #### `trackPageView(properties?)` 追踪页面访问事件。 ```javascript tracker.trackPageView({ page_type: 'product_detail', product_id: 'abc123' }); ``` #### `trackUserAction(actionName, properties?)` 追踪用户行为事件。 ```javascript tracker.trackUserAction('search', { query: 'iPhone', results_count: 25 }); ``` ### 用户管理 #### `setUser(userInfo)` 设置用户信息。 ```javascript tracker.setUser({ userId: 'user-456', properties: { name: 'John Doe', email: 'john@example.com', vip_level: 'gold' } }); ``` #### `clearUser()` 清除用户信息。 ```javascript tracker.clearUser(); ``` ### 配置管理 #### `updateConfig(newConfig)` 更新配置。 ```javascript tracker.updateConfig({ userId: 'new-user-id', debug: false }); ``` #### `getConfig()` 获取当前配置。 ```javascript const config = tracker.getConfig(); console.log(config.appId); ``` ### 会话管理 #### `getSessionId()` 获取当前会话ID。 ```javascript const sessionId = tracker.getSessionId(); ``` #### `renewSession()` 重新生成会话ID。 ```javascript const newSessionId = tracker.renewSession(); ``` ### 数据上报 #### `flush()` 立即上报所有待上报事件。 ```javascript await tracker.flush(); ``` #### `destroy()` 销毁追踪器,清理资源。 ```javascript tracker.destroy(); ``` ## 自动埋点 ### 页面访问追踪 自动追踪页面访问、页面离开、页面隐藏等事件。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', autoTrackPageView: true // 默认开启 }); ``` ### 点击事件追踪 自动追踪页面上的点击事件。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', autoTrackClick: true }); ``` ### 错误监控 自动收集JavaScript错误、Promise异常、资源加载错误。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', autoTrackError: true // 默认开启 }); ``` ## 上报策略 ### 实时上报 事件发生后立即上报。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', reportMethod: 'immediate' }); ``` ### 批量上报 收集一定数量的事件或达到时间间隔后批量上报。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', reportMethod: 'batch', batchSize: 20, batchInterval: 10000 }); ``` ### Beacon上报 使用 `navigator.sendBeacon` API上报,适合页面卸载时使用。 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', reportMethod: 'beacon' }); ``` ## 数据格式 ### 上报数据结构 ```json { "appId": "your-app-id", "timestamp": 1640995200000, "events": [ { "eventType": "custom", "eventName": "button_click", "properties": { "button_id": "submit-btn", "page": "checkout" }, "timestamp": 1640995200000, "userId": "user-123", "sessionId": "session-456", "pageUrl": "https://example.com/checkout", "pageTitle": "Checkout Page", "userAgent": "Mozilla/5.0...", "screenResolution": "1920x1080", "deviceType": "desktop" } ] } ``` ### 事件类型 - `page_view`: 页面访问 - `click`: 点击事件 - `custom`: 自定义事件 - `error`: 错误事件 - `performance`: 性能事件 - `user_action`: 用户行为 ## 最佳实践 ### 1. 合理设置批量上报参数 ```javascript // 高频应用建议使用较大的批量大小 const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', batchSize: 50, batchInterval: 30000 }); ``` ### 2. 生产环境关闭调试模式 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', debug: process.env.NODE_ENV === 'development' }); ``` ### 3. 设置合适的请求头 ```javascript const tracker = new ArgosTracker({ reportUrl: 'https://your-api.com/track', appId: 'your-app-id', headers: { 'Authorization': 'Bearer your-token', 'X-API-Key': 'your-api-key' } }); ``` ### 4. 页面卸载前确保数据上报 ```javascript window.addEventListener('beforeunload', async () => { await tracker.flush(); }); ``` ## 浏览器兼容性 - Chrome >= 60 - Firefox >= 55 - Safari >= 12 - Edge >= 79 - IE >= 11 (需要 polyfill) ## 开发 ### 安装依赖 ```bash npm install ``` ### 开发模式 ```bash npm run dev ``` ### 构建 ```bash npm run build ``` ### 测试 ```bash npm test ``` ### 代码检查 ```bash npm run lint ``` ## 许可证 MIT License ## 贡献 欢迎提交 Issue 和 Pull Request! ## 更新日志 详细的更新日志请查看 [CHANGELOG.md](./CHANGELOG.md)