sunda-tracker 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.babelrc +23 -0
- package/.npmrc.exclude +1 -0
- package/.prettierrc.json +9 -0
- package/.yarnrc.exclude +1 -0
- package/README.md +263 -0
- package/dist/sunda-tracker.es.js +806 -0
- package/dist/sunda-tracker.umd.js +5 -0
- package/eslint.config.js +25 -0
- package/package.json +30 -0
- package/src/core/ApiSender.js +185 -0
- package/src/core/Device.js +291 -0
- package/src/core/ElasticsearchSender.js +215 -0
- package/src/core/Queue.js +21 -0
- package/src/core/Storage.js +34 -0
- package/src/core/Track.js +53 -0
- package/src/index.js +45 -0
- package/src/plugins/AutoTrack.js +47 -0
- package/src/plugins/Performance.js +189 -0
- package/src/utils/constants.js +21 -0
- package/src/utils/helpers.js +216 -0
- package/vite.config.js +33 -0
package/.babelrc
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{
|
|
2
|
+
"presets": [
|
|
3
|
+
[
|
|
4
|
+
"@babel/preset-env",
|
|
5
|
+
{
|
|
6
|
+
"targets": {
|
|
7
|
+
"browsers": [
|
|
8
|
+
"> 1%",
|
|
9
|
+
"last 2 versions",
|
|
10
|
+
"not ie <= 8"
|
|
11
|
+
]
|
|
12
|
+
},
|
|
13
|
+
"modules": "commonjs",
|
|
14
|
+
"useBuiltIns": "usage",
|
|
15
|
+
"corejs": 3
|
|
16
|
+
}
|
|
17
|
+
]
|
|
18
|
+
],
|
|
19
|
+
"plugins": [
|
|
20
|
+
"@babel/plugin-transform-runtime",
|
|
21
|
+
"@babel/plugin-proposal-class-properties"
|
|
22
|
+
]
|
|
23
|
+
}
|
package/.npmrc.exclude
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
registry=http://nexus.sunda.top/repository/npm-sunda-hosted/
|
package/.prettierrc.json
ADDED
package/.yarnrc.exclude
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
registry=http://nexus.sunda.top/repository/npm-sunda-hosted/
|
package/README.md
ADDED
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
# 森大埋点系统 前端 SDK
|
|
2
|
+
|
|
3
|
+
## 简介
|
|
4
|
+
|
|
5
|
+
森大埋点系统(Sunda Tracker)是一个轻量级的前端埋点解决方案,用于收集用户行为数据和应用性能指标。该 SDK 支持多种前端框架,包括原生 JavaScript、Vue 和 React。
|
|
6
|
+
|
|
7
|
+
## 安装
|
|
8
|
+
|
|
9
|
+
通过 npm 安装:
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
npm install sunda-tracker
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
或通过 yarn 安装:
|
|
16
|
+
|
|
17
|
+
```js
|
|
18
|
+
yarn add sunda-tracker
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 如何使用
|
|
22
|
+
|
|
23
|
+
### 原生 JavaScript
|
|
24
|
+
|
|
25
|
+
```js
|
|
26
|
+
import initTracker from 'sunda-tracker'
|
|
27
|
+
|
|
28
|
+
// 初始化埋点系统,设置是否自动开启
|
|
29
|
+
const tracker = initTracker({ autoTrack: true })
|
|
30
|
+
|
|
31
|
+
// 手动触发埋点事件
|
|
32
|
+
tracker.track('button_click', { buttonId: 'submit', page: 'home' })
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Vue
|
|
36
|
+
|
|
37
|
+
```js
|
|
38
|
+
import { createApp } from 'vue'
|
|
39
|
+
import { VueTracker } from 'sunda-tracker'
|
|
40
|
+
import App from './App.vue'
|
|
41
|
+
|
|
42
|
+
const app = createApp(App)
|
|
43
|
+
|
|
44
|
+
// 注册埋点插件
|
|
45
|
+
app.use(VueTracker, {
|
|
46
|
+
autoTrack: true,
|
|
47
|
+
// 其他配置项
|
|
48
|
+
collectUrl: 'https://analytics.example.com',
|
|
49
|
+
type: 'api' // api, es
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
app.mount('#app')
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
在 Vue 组件中使用:
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
// 在组件中使用
|
|
59
|
+
export default {
|
|
60
|
+
methods: {
|
|
61
|
+
handleClick() {
|
|
62
|
+
this.$track('button_click', { buttonId: 'submit' })
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
mounted() {
|
|
66
|
+
// 设置用户信息
|
|
67
|
+
this.$setUser({ userId: '12345', role: 'admin' })
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### React
|
|
73
|
+
|
|
74
|
+
```jsx
|
|
75
|
+
// 在应用入口文件 (如 index.js 或 App.js)
|
|
76
|
+
import React from 'react'
|
|
77
|
+
import ReactDOM from 'react-dom'
|
|
78
|
+
import { TrackProvider } from './TrackContext'
|
|
79
|
+
import App from './App'
|
|
80
|
+
|
|
81
|
+
ReactDOM.render(
|
|
82
|
+
<TrackProvider options={{
|
|
83
|
+
autoTrack: true,
|
|
84
|
+
collectUrl: 'https://analytics.example.com',
|
|
85
|
+
type: 'api'
|
|
86
|
+
}}>
|
|
87
|
+
<App />
|
|
88
|
+
</TrackProvider>,
|
|
89
|
+
document.getElementById('root')
|
|
90
|
+
)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
TrackContext.js 文件:
|
|
94
|
+
|
|
95
|
+
```js
|
|
96
|
+
// TrackContext.js
|
|
97
|
+
import React, { createContext, useContext } from 'react'
|
|
98
|
+
import initTracker from 'sunda-tracker'
|
|
99
|
+
|
|
100
|
+
// 默认配置
|
|
101
|
+
const DEFAULT_OPTIONS = {
|
|
102
|
+
autoTrack: true,
|
|
103
|
+
collectUrl: 'https://analytics.default.com'
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// 创建上下文
|
|
107
|
+
const TrackContext = createContext(null)
|
|
108
|
+
|
|
109
|
+
// 创建Provider组件
|
|
110
|
+
export const TrackProvider = ({ children, options = {} }) => {
|
|
111
|
+
// 创建Track实例
|
|
112
|
+
const trackInstance = initTracker({
|
|
113
|
+
...DEFAULT_OPTIONS,
|
|
114
|
+
...options
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
// 定义跟踪方法
|
|
118
|
+
const trackMethods = {
|
|
119
|
+
track(eventName, eventData) {
|
|
120
|
+
return trackInstance.track(eventName, eventData)
|
|
121
|
+
},
|
|
122
|
+
|
|
123
|
+
setUser(userInfo) {
|
|
124
|
+
return trackInstance.setUser(userInfo)
|
|
125
|
+
},
|
|
126
|
+
|
|
127
|
+
clearUser() {
|
|
128
|
+
return trackInstance.clearUser()
|
|
129
|
+
},
|
|
130
|
+
|
|
131
|
+
trackDeviceInfo() {
|
|
132
|
+
return trackInstance.track('device', trackInstance.deviceInfo)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
return (
|
|
137
|
+
<TrackContext.Provider value={trackMethods}>
|
|
138
|
+
{children}
|
|
139
|
+
</TrackContext.Provider>
|
|
140
|
+
)
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 创建自定义Hook
|
|
144
|
+
export const useTrack = () => {
|
|
145
|
+
const context = useContext(TrackContext)
|
|
146
|
+
if (!context) {
|
|
147
|
+
throw new Error('useTrack must be used within a TrackProvider')
|
|
148
|
+
}
|
|
149
|
+
return context
|
|
150
|
+
}
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
在 React 组件中使用:
|
|
154
|
+
|
|
155
|
+
```jsx
|
|
156
|
+
import React from 'react'
|
|
157
|
+
import { useTrack } from './TrackContext'
|
|
158
|
+
|
|
159
|
+
function MyComponent() {
|
|
160
|
+
const { track, setUser } = useTrack()
|
|
161
|
+
|
|
162
|
+
const handleClick = () => {
|
|
163
|
+
track('button_click', { buttonId: 'submit', component: 'MyComponent' })
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
React.useEffect(() => {
|
|
167
|
+
// 设置用户信息
|
|
168
|
+
setUser({ userId: '12345', role: 'user' })
|
|
169
|
+
}, [])
|
|
170
|
+
|
|
171
|
+
return (
|
|
172
|
+
<button onClick={handleClick}>
|
|
173
|
+
提交
|
|
174
|
+
</button>
|
|
175
|
+
)
|
|
176
|
+
}
|
|
177
|
+
```
|
|
178
|
+
|
|
179
|
+
### HTML 标记埋点
|
|
180
|
+
|
|
181
|
+
您可以通过添加特定的 data 属性来实现声明式埋点:
|
|
182
|
+
|
|
183
|
+
```html
|
|
184
|
+
<button
|
|
185
|
+
data-track-type="button_click"
|
|
186
|
+
data-track-args-code="submit_button"
|
|
187
|
+
data-track-args-name="提交按钮"
|
|
188
|
+
data-track-args-page="home"
|
|
189
|
+
>
|
|
190
|
+
提交
|
|
191
|
+
</button>
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
## 配置选项
|
|
195
|
+
|
|
196
|
+
初始化埋点系统时可用的配置选项:
|
|
197
|
+
|
|
198
|
+
| 选项 | 类型 | 默认值 | 描述 |
|
|
199
|
+
|------|------|--------|------|
|
|
200
|
+
| autoTrack | Boolean | false | 是否自动跟踪页面浏览、点击等事件 |
|
|
201
|
+
| serverUrl | String | - | 数据上报的服务器地址 |
|
|
202
|
+
| appId | String | - | 应用标识 |
|
|
203
|
+
| sampleRate | Number | 1 | 采样率 (0-1 之间的数值) |
|
|
204
|
+
| maxCacheSize | Number | 50 | 本地缓存的最大事件数量 |
|
|
205
|
+
| debug | Boolean | false | 是否开启调试模式 |
|
|
206
|
+
|
|
207
|
+
## API 参考
|
|
208
|
+
|
|
209
|
+
### 核心方法
|
|
210
|
+
|
|
211
|
+
- **track(eventName, eventData)**: 手动触发埋点事件
|
|
212
|
+
- **setUser(userInfo)**: 设置用户信息
|
|
213
|
+
- **clearUser()**: 清除用户信息
|
|
214
|
+
- **getDeviceInfo()**: 获取设备信息
|
|
215
|
+
- **enableAutoTrack()**: 启用自动埋点
|
|
216
|
+
- **disableAutoTrack()**: 禁用自动埋点
|
|
217
|
+
|
|
218
|
+
### 自动采集的事件类型(计划中,目前不会采集这些)
|
|
219
|
+
|
|
220
|
+
当 `autoTrack` 设置为 `true` 时,SDK 会自动采集以下事件:
|
|
221
|
+
|
|
222
|
+
- 页面浏览 (`page_view`)
|
|
223
|
+
- 页面离开 (`page_leave`)
|
|
224
|
+
- 点击事件 (`element_click`)
|
|
225
|
+
- 表单提交 (`form_submit`)
|
|
226
|
+
- 错误事件 (`js_error`)
|
|
227
|
+
- 资源加载失败 (`resource_error`)
|
|
228
|
+
- 性能指标 (`performance`)
|
|
229
|
+
|
|
230
|
+
## 高级用法
|
|
231
|
+
|
|
232
|
+
### 批量上报
|
|
233
|
+
|
|
234
|
+
```js
|
|
235
|
+
initTracker({
|
|
236
|
+
batchSend: true,
|
|
237
|
+
batchSize: 10, // 累积10条数据后上报
|
|
238
|
+
batchTime: 5000 // 或者每5秒上报一次,以先到者为准
|
|
239
|
+
})
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
### 离线缓存
|
|
243
|
+
|
|
244
|
+
SDK 支持在网络不可用时缓存埋点数据,并在网络恢复后自动上报:
|
|
245
|
+
|
|
246
|
+
```js
|
|
247
|
+
initTracker({
|
|
248
|
+
enableOfflineCache: true,
|
|
249
|
+
maxCacheSize: 100, // 最多缓存100条事件
|
|
250
|
+
maxCacheTime: 7 * 24 * 60 * 60 * 1000 // 最长缓存7天
|
|
251
|
+
})
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## 注意事项
|
|
255
|
+
|
|
256
|
+
1. 在生产环境中,建议设置合适的采样率以减少数据量
|
|
257
|
+
2. 敏感信息(如密码、身份证号等)不应被埋点收集
|
|
258
|
+
3. 确保遵守相关的数据隐私法规和政策
|
|
259
|
+
|
|
260
|
+
|
|
261
|
+
## 许可证
|
|
262
|
+
|
|
263
|
+
MIT
|