@mingfuyun/star-allinone 0.4.0 → 0.4.1

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.
@@ -10,7 +10,7 @@ Peer React is **18.3.1**. The npm package does not export a table.
10
10
 
11
11
  - Lists: `import MFProTable from '@/components/CommonTable/MFProTable'`. There is no `MFTablePro`. Never import a table from `@mingfuyun/star-allinone`.
12
12
  - Overlays: `import { CustomDrawer, BaseModal, HocModal } from '@mingfuyun/star-allinone'`. Do not add or keep `src/components/CustomDrawer` (or local BaseModal / HocModal).
13
- - Package runtime exports only: `Cron`, `CustomDrawer`, `BaseModal`, `HocModal`, `ErrorBoundary`.
13
+ - Package runtime exports: `Cron`, `CustomDrawer`, `BaseModal`, `HocModal`, `ErrorBoundary`, plus tracking helpers `createTracking`, `getTrackData`, and `TRACKING_REPORT_URLS` from `0.4.0`.
14
14
  - Pages: `import Service from '@/services'`. Do not call axios or `src/services/request.tsx` from pages.
15
15
 
16
16
  Props for `MFProTable` are in `.agents/skills/shared-project-conventions/references/mfprotable.md` after skills sync.
@@ -24,6 +24,7 @@ User-facing shared entries only:
24
24
  - Project health: `pnpm exec star-allinone doctor`.
25
25
  - Review and commit: `$shared-review-and-submit`. Wait for confirmation.
26
26
  - Test publish: `$shared-publish-test` after explicit pipeline confirmation.
27
+ - Tracking: `$shared-tracking`. Load the SDK from OSS. Do not commit `tracking-sdk.global.min.js`.
27
28
 
28
29
  ## Hard rules
29
30
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mingfuyun/star-allinone",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "星系运维前端能力包",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
package/skills/README.md CHANGED
@@ -36,7 +36,7 @@ Cursor / Codex 的常驻说明只放仓库根 `AGENTS.md`(模板见 `examples/
36
36
 
37
37
  ## npm 包的职责
38
38
 
39
- `@mingfuyun/star-allinone` 只发布 **4 个用户入口**。其余是入口的 `references/` 或无 `SKILL.md` 的共享文件:
39
+ `@mingfuyun/star-allinone` 发布下面这些用户入口。其余是入口的 `references/` 或无 `SKILL.md` 的共享文件:
40
40
 
41
41
  ```text
42
42
  @mingfuyun/star-allinone/
@@ -46,6 +46,7 @@ Cursor / Codex 的常驻说明只放仓库根 `AGENTS.md`(模板见 `examples/
46
46
  ├── design-to-page/ # 页面;标准列表内部跑 gen page
47
47
  ├── review-and-submit/ # 审查并提交;步骤在 references/
48
48
  ├── publish-test/ # 测发
49
+ ├── tracking/ # 埋点接入
49
50
  ├── project-conventions/ # architecture / component-contract / mfprotable / review-checklist / quality-checklist
50
51
  └── i-have-adhd/ # 用户输出格式
51
52
  ```
@@ -126,6 +127,7 @@ git commit -m "chore(skill): 更新公共 skill"
126
127
  | `shared-design-to-page` | 页面:标准列表内部 `gen page`,其余按设计稿实现 |
127
128
  | `shared-review-and-submit` | 审查并提交 |
128
129
  | `shared-publish-test` | 测发 |
130
+ | `shared-tracking` | 埋点:升级能力包、加载 OSS 脚本、初始化、失败上报、按钮 `data-track` |
129
131
 
130
132
  ## 公共规则写在哪里
131
133
 
@@ -135,6 +137,7 @@ git commit -m "chore(skill): 更新公共 skill"
135
137
  | `shared-design-to-page` | SKILL + `page-conventions.md`、`overlays.md`、`list-page-template.md` | 页面分层、标准列表 CLI、弹层合同 |
136
138
  | `shared-review-and-submit` | SKILL + `impact-analysis.md`、`verify.md`、`ai-review.md`、`commit.md` | 影响分析 → 验证 → 确认后提交 |
137
139
  | `shared-publish-test` | SKILL + `scripts/publish-current-branch.sh` | 云效测发;只读 `publishPipelineId` |
140
+ | `shared-tracking` | SKILL | 埋点接入:能力包版本、配置文件、脚本、初始化、失败上报、按钮 |
138
141
  | (非入口)`shared-project-conventions` | `architecture.md`、`mfprotable.md`、`component-contract.md`、`review-checklist.md`、`quality-checklist.md` | 架构、导入合同、质量清单 |
139
142
  | (非入口)`shared-i-have-adhd` | `i-have-adhd.md` | 用户输出格式 |
140
143
 
@@ -0,0 +1,128 @@
1
+ ---
2
+ name: {{sharedSkillName}}
3
+ description: User-facing. Connect a galaxy admin app to the shared tracking SDK. Use when the user asks to add tracking, 埋点, data-track, api_request failure reports, or window.__tracker. Requires @mingfuyun/star-allinone 0.4.0 or newer.
4
+ ---
5
+
6
+ # 埋点接入
7
+
8
+ 把星系管理端接到统一埋点。运行时在 `@mingfuyun/star-allinone` 的 `createTracking`。SDK 脚本只从 OSS 加载,不要放进业务仓库,也不要打进 webpack。
9
+
10
+ 先确认埋点平台已登记本项目的 `appId`。测试用 `test-<project>`,生产用 `<project>`。不一致时只改配置,不改包。
11
+
12
+ ## 1. 更新能力包
13
+
14
+ 依赖至少 `0.4.0`。这一版才有 `createTracking`、`TRACKING_REPORT_URLS`,以及 `CustomDrawer` 的 `cancelTrack` / `okTrack`。
15
+
16
+ ```bash
17
+ pnpm add @mingfuyun/star-allinone@^0.4.0
18
+ pnpm exec star-allinone skills sync
19
+ ```
20
+
21
+ `package.json` 里写成 `"@mingfuyun/star-allinone": "^0.4.0"`。不要把 SDK 文件拷进 `public/`。
22
+
23
+ ## 2. 添加的文件
24
+
25
+ 只新增一个配置文件:`src/utils/tracking/index.ts`。
26
+
27
+ 它负责 appId、用户标识、入队规则、路由中文名。队列、创建和销毁 tracker 都调用包,不要在业务项目再写一套。
28
+
29
+ ```ts
30
+ import { TRACKING_REPORT_URLS, createTracking } from '@mingfuyun/star-allinone';
31
+
32
+ type TrackingUser = {
33
+ email?: string;
34
+ username?: string;
35
+ };
36
+
37
+ const tracking = createTracking<TrackingUser>({
38
+ getConfig: () =>
39
+ ENV === 'test' || ENV === 'prod'
40
+ ? {
41
+ appId: ENV === 'prod' ? '<project>' : 'test-<project>',
42
+ reportUrl: TRACKING_REPORT_URLS[ENV],
43
+ }
44
+ : undefined,
45
+ getUserId: (user) =>
46
+ user?.email
47
+ ? `u_${user.email}${user.username ? `_${user.username}` : ''}`
48
+ : undefined,
49
+ shouldQueue: ({ ready, pathname }) => !ready || pathname === '/',
50
+ getRouteName: (pathname) => undefined,
51
+ normalizePathname: (pathname) => pathname,
52
+ });
53
+
54
+ export const markTrackingReady = tracking.markReady;
55
+ export const syncTrackingRoute = tracking.syncRoute;
56
+ export const reportApiTracking = tracking.reportApi;
57
+ export const getTrackData = tracking.getTrackData;
58
+ ```
59
+
60
+ 按项目改这四项:
61
+
62
+ - `getConfig`:没有 `test` / `prod` 时返回 `undefined`,不要创建 tracker。`ENV` 不是全局时,改成该项目自己的环境变量。
63
+ - `getUserId`:星链是 `u_{email}` 或 `u_{email}_{username}`。别的项目用自己的稳定用户字段,格式保持 `u_` 前缀。不要放 token。
64
+ - `shouldQueue`:用户或路由还没就绪时入队。单应用在 `/` 或未就绪时入队。多应用还要在离开可埋点路径时清空队列,给 `createTracking` 传 `shouldClearQueue`。
65
+ - `getRouteName` / `normalizePathname`:用本项目路由表把 path 变成中文名。有 `publicPath` 时先去掉前缀再查路由。没有路由名时 `getTrackData` 仍可用,名称里会少页面名。
66
+
67
+ ## 3. 要改的文件
68
+
69
+ ### 加载脚本
70
+
71
+ 在 HTML 或 Umi `headScripts` 里插入普通 script。地址固定为:
72
+
73
+ `https://statics-mf.cjjd10.com/STAR_STATIC/LIBS/tracking-sdk.global.min.js`
74
+
75
+ Umi 不要把本地 `public` 文件写进 `headScripts.src`。Vite 会把它当成源码导入然后报错。用内联脚本创建标签:
76
+
77
+ ```js
78
+ (function () {
79
+ var script = document.createElement('script');
80
+ script.src = 'https://statics-mf.cjjd10.com/STAR_STATIC/LIBS/tracking-sdk.global.min.js';
81
+ document.head.appendChild(script);
82
+ })();
83
+ ```
84
+
85
+ 不要改已有的性能上报脚本。
86
+
87
+ ### 初始化
88
+
89
+ Umi:
90
+
91
+ - `src/app.tsx` 的 `getInitialState` 成功和失败都调用 `markTrackingReady(user)`。失败时传空用户,页面仍要能打开。
92
+ - 增加 `onRouteChange`,调用 `syncTrackingRoute(location.pathname)`。
93
+
94
+ 其他框架在用户信息就绪后调用 `markTrackingReady`,路由变化时调用 `syncTrackingRoute`。不要在业务组件里 `createTracker`。
95
+
96
+ 同一 `appId` 和用户会复用 `window.__tracker`。异常由包吞掉,不能影响页面。
97
+
98
+ ### 接口失败
99
+
100
+ 在项目自己的请求封装里,业务 `code` 非 0 或 HTTP 失败时调用 `reportApiTracking`。成功不报。字段:去掉 query 的 `url`、大写 `method`、`duration`、`success: false`、`status`、`errorMessage`。保留原来的 `message.error`。页面不要直接调 axios。
101
+
102
+ ### 按钮
103
+
104
+ `getTrackData(action, name, { key, name })` 生成 `data-track` JSON。`id` 用下划线,展示名用 `-` 连接。
105
+
106
+ - 提交类按钮加 `data-track={getTrackData(...)}`。
107
+ - `CustomDrawer` 默认底部用 `cancelTrack` 和 `okTrack`,不要为了埋点整段替换 `footer`。自定义 `footer` 时,把 `data-track` 写在自己的按钮上。
108
+ - 项目里的 `MFProTable`:工具栏按钮透传 `track`;查询按钮用 `filter_query` / `查询`,重置按钮用 `filter_reset` / `重置`。ProTable 重置按钮的 key 是 `rest`。
109
+ - 不加复制、列设置。搜索栏里除查询和重置以外的按钮,除非用户点名,否则不加。
110
+
111
+ ## 不要做的事
112
+
113
+ - 不要把 `tracking-sdk.global.min.js` 提交到业务仓库。
114
+ - 不要把 SDK 打进业务 bundle,也不要从源码 `import` 它。
115
+ - 不要在包外重写队列。上限 50 条、失败补报已经在 `createTracking` 里。
116
+ - 不要上报成功请求。
117
+ - 不要为了埋点改用户接口或请求错误提示。
118
+
119
+ ## 验证
120
+
121
+ `pnpm typecheck`。浏览器里确认:
122
+
123
+ 1. 页面请求了 OSS 上的脚本,并且出现 `window.TrackingSDK`。
124
+ 2. 进入业务页、初始状态完成后存在 `window.__tracker`。`/` 上可以还没有。
125
+ 3. 一次失败请求发出事件名 `api_request`。
126
+ 4. 查询、重置和主要提交按钮带 `data-track`。
127
+
128
+ `appId` 与平台不一致时,只改 `src/utils/tracking/index.ts`。