@fz-firefly/taro 0.0.0-stage → 0.2.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.
- package/README.md +116 -2
- package/dist/index.cjs +870 -0
- package/dist/index.d.cts +163 -0
- package/dist/index.d.ts +163 -0
- package/dist/index.js +843 -0
- package/dist/react.cjs +32 -0
- package/dist/react.d.cts +2 -0
- package/dist/react.d.ts +2 -0
- package/dist/react.js +1 -0
- package/dist/vue.cjs +20 -0
- package/dist/vue.d.cts +2 -0
- package/dist/vue.d.ts +2 -0
- package/dist/vue.js +1 -0
- package/package.json +60 -3
package/README.md
CHANGED
|
@@ -1,3 +1,117 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @fz-firefly/taro
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
萤火虫 SDK 的 Taro 平台适配层。负责 Taro 存储、请求、系统信息、全局错误、生命周期冲刷和页面上下文,**不直接依赖 `window`、`localStorage` 或 `fetch`**,因此同一份代码可以跑在 H5、微信小程序、支付宝小程序和 React Native。
|
|
4
|
+
|
|
5
|
+
React / Vue 的组件错误处理是框架层的事,通过子路径引入:
|
|
6
|
+
|
|
7
|
+
| 项目 | 平台入口 | 框架入口 |
|
|
8
|
+
| ------------ | ------------------ | ------------------------ |
|
|
9
|
+
| Taro + React | `@fz-firefly/taro` | `@fz-firefly/taro/react` |
|
|
10
|
+
| Taro + Vue 3 | `@fz-firefly/taro` | `@fz-firefly/taro/vue` |
|
|
11
|
+
|
|
12
|
+
## 安装
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
pnpm add @fz-firefly/taro
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Taro 项目本身已经安装 `@tarojs/taro`,不需要重复安装。
|
|
19
|
+
|
|
20
|
+
### 可选:注入 runtime
|
|
21
|
+
|
|
22
|
+
默认使用 `@tarojs/taro`。如果 pnpm 等包管理器解析出多份 Taro,SDK 可能拿到未初始化的一份,表现为 `Taro.request` / 存储 API 不可用。此时可以把项目实际使用的运行时传给 `initFirefly`:
|
|
23
|
+
|
|
24
|
+
```ts
|
|
25
|
+
import Taro from '@tarojs/taro'
|
|
26
|
+
import { initFirefly } from '@fz-firefly/taro'
|
|
27
|
+
|
|
28
|
+
initFirefly({ runtime: Taro, dsn, endpoint })
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
H5 的 `request`、`getStorageSync` 等 API 位于 `@tarojs/taro-h5` 的命名导出上;测试台会把该模块作为 runtime 注入。
|
|
32
|
+
|
|
33
|
+
## Taro + React
|
|
34
|
+
|
|
35
|
+
```tsx
|
|
36
|
+
// src/app.tsx
|
|
37
|
+
import type { PropsWithChildren } from 'react'
|
|
38
|
+
import { initFirefly } from '@fz-firefly/taro'
|
|
39
|
+
import { FireflyErrorBoundary } from '@fz-firefly/taro/react'
|
|
40
|
+
|
|
41
|
+
const firefly = initFirefly({
|
|
42
|
+
dsn: process.env.TARO_APP_FIREFLY_DSN,
|
|
43
|
+
endpoint: process.env.TARO_APP_FIREFLY_ENDPOINT,
|
|
44
|
+
environment:
|
|
45
|
+
process.env.NODE_ENV === 'production' ? 'production' : 'development',
|
|
46
|
+
release: process.env.TARO_APP_RELEASE,
|
|
47
|
+
// dist 不传时自动使用 Taro.getEnv():h5 / mp-weixin / mp-alipay / rn
|
|
48
|
+
})
|
|
49
|
+
|
|
50
|
+
export default function App({ children }: PropsWithChildren) {
|
|
51
|
+
return (
|
|
52
|
+
<FireflyErrorBoundary client={firefly.client}>
|
|
53
|
+
{children}
|
|
54
|
+
</FireflyErrorBoundary>
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Taro React 的页面渲染由 Taro 运行时接管,通常不会自己调用 `createRoot`,所以错误边界是主要的组件错误捕获方式。
|
|
60
|
+
|
|
61
|
+
## Taro + Vue 3
|
|
62
|
+
|
|
63
|
+
```ts
|
|
64
|
+
// src/app.ts
|
|
65
|
+
import { createApp } from 'vue'
|
|
66
|
+
import { initFirefly } from '@fz-firefly/taro'
|
|
67
|
+
import { installVue } from '@fz-firefly/taro/vue'
|
|
68
|
+
import App from './App.vue'
|
|
69
|
+
|
|
70
|
+
const firefly = initFirefly({
|
|
71
|
+
dsn: process.env.TARO_APP_FIREFLY_DSN,
|
|
72
|
+
endpoint: process.env.TARO_APP_FIREFLY_ENDPOINT,
|
|
73
|
+
environment:
|
|
74
|
+
process.env.NODE_ENV === 'production' ? 'production' : 'development',
|
|
75
|
+
release: process.env.TARO_APP_RELEASE,
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
const app = createApp(App)
|
|
79
|
+
installVue({ client: firefly.client, app })
|
|
80
|
+
|
|
81
|
+
export default app
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`installVue` 会接管 `app.config.errorHandler`,并把 client 挂到 `app.config.globalProperties.$firefly`。Taro 不使用 `vue-router`,页面面包屑由 SDK 包装的导航 API 负责(见下方限制)。
|
|
85
|
+
|
|
86
|
+
## 手动上报
|
|
87
|
+
|
|
88
|
+
```ts
|
|
89
|
+
firefly.client.captureException(error, {
|
|
90
|
+
tags: { module: 'order' },
|
|
91
|
+
})
|
|
92
|
+
|
|
93
|
+
firefly.client.track('pay_click', { channel: 'wechat' })
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## 平台识别
|
|
97
|
+
|
|
98
|
+
`Taro.getEnv()` 的返回值会映射到上报协议的平台字段:
|
|
99
|
+
|
|
100
|
+
| Taro 环境 | platform | 默认 dist |
|
|
101
|
+
| --------------------------- | ----------- | --------------------------------------- |
|
|
102
|
+
| `WEB` / `H5` | `web` | `h5` |
|
|
103
|
+
| `WEAPP` | `mp-weixin` | `mp-weixin` |
|
|
104
|
+
| `ALIPAY` | `mp-alipay` | `mp-alipay` |
|
|
105
|
+
| `RN` | `app` | `rn` |
|
|
106
|
+
| `SWAN` / `TT` / `QQ` / `JD` | `app` | `mp-swan` / `mp-tt` / `mp-qq` / `mp-jd` |
|
|
107
|
+
|
|
108
|
+
协议目前只接受 `web` / `mp-weixin` / `mp-alipay` / `app`,所以未覆盖的小程序在 `platform` 上归为 `app`,真实平台保留在 `dist` 里,仍可按版本和 `dist` 区分。
|
|
109
|
+
|
|
110
|
+
## 行为与限制
|
|
111
|
+
|
|
112
|
+
- 应用隐藏、回到前台和 H5 `pagehide` 时冲刷队列。
|
|
113
|
+
- 小程序切后台会触发 `onAppHide`,这是最后一次补发机会。
|
|
114
|
+
- 页面上下文会带上 `ctx.page.route` 和 `ctx.page.query`。
|
|
115
|
+
- 页面跳转面包屑通过包装 `Taro.navigateTo`、`redirectTo`、`switchTab`、`reLaunch`、`navigateBack` 记录。Taro 没有 uni-app 那样的统一路由拦截器,这是跨 React / Vue、跨 H5 / 小程序都能工作的折中方案。
|
|
116
|
+
- 已知边界:在 `initFirefly` 之前解构了导航方法,或直接调用 `wx.navigateTo` 等平台原生 API,不会经过包装,需要手动 `client.addBreadcrumb()`。
|
|
117
|
+
- 不传 `dist` 时根据 `Taro.getEnv()` 自动推断;上传 sourcemap 时必须使用相同的 `dist`。
|