首页 js-avo-inspector 速查
3.2.0 2026-07-10 avohq/js-avo-inspector
打开 Zread CodeWiki
340px

快速定位

目标最短入口备注
安装(Web)npm i avo-inspector完整版,含加密与校验
安装(生产/轻量)from "avo-inspector/lite"~20KB min / ~5.2KB gzip
初始化new AvoInspector({ apiKey, env, version })从 avo.app 获取 apiKey
核心埋点trackSchemaFromEvent(name, props)自动提取 Schema 并上报
手动提取extractSchema(props)预览 Schema 格式

安装与初始化

标准安装(Web / React Native)

npm i avo-inspector
# 或
yarn add avo-inspector
import * as Inspector from "avo-inspector";

const inspector = new Inspector.AvoInspector({
  apiKey: "your-api-key",                    // 从 avo.app 获取
  env: Inspector.AvoInspectorEnv.Dev,       // Dev | Prod
  version: "1.0.0",
  appName: "My app",                         // 可选
  suffix: "unique-string",                   // 多实例隔离(可选)
});

SSR / Web Worker 场景

→ 改用 ssr-web-avo-inspector

React Native 场景

→ 使用 react-native-avo-inspector

Lite Build(生产轻量)

import { AvoInspector, AvoInspectorEnv } from "avo-inspector/lite";

const inspector = new AvoInspector({
  apiKey: "your-api-key",
  env: AvoInspectorEnv.Prod,
  version: "1.0.0",
});

核心 API

trackSchemaFromEvent — 自动提取 Schema

推荐用法,在调用分析工具 track 的同一位置调用:
// 发送事件时同时上报 Schema
inspector.trackSchemaFromEvent("User Signed Up", {
  email: "user@example.com",
  age: 25,
  isPremium: true,
  signupMethod: "google",
});

trackSchema — 手动构造 Schema

当你已有 Schema 定义时使用(不走自动提取):
inspector.trackSchema("User Signed Up", [
  { propertyName: "email",         propertyType: "string" },
  { propertyName: "age",           propertyType: "int" },
  { propertyName: "isPremium",    propertyType: "boolean" },
]);

extractSchema — 仅提取不发送

调试用,预览 Schema 长什么样:
const schema = inspector.extractSchema({
  userId: "u_123",
  amount: 99.9,
  tags: ["pro", "trial"],
  metadata: { plan: "basic" },
});
console.log(JSON.stringify(schema, null, 2));

事件上报方法对比

方法自动提取上报校验批量发送适用场景
trackSchemaFromEvent❌(立即)推荐;与 track 同位置调用
trackSchema❌(手动)Schema 已定义好的场景
extractSchema调试、Schema 预览

配置项

初始化配置

参数类型说明
apiKeystring必填,从 avo.app 获取
envAvoInspectorEnvDev / Prod(Dev 默认开日志,Prod 禁用)
versionstring必填,App 版本号
appNamestring可选,应用名
suffixstring多实例隔离标识
publicEncryptionKeystringDev/Staging 启用属性值加密(Lite 版不支持)

批量控制

inspector.setBatchSize(15);              // 默认 30,超过即发送
inspector.setBatchFlushSeconds(10);      // 默认 30s,超时强制发送
// Dev 模式下批量自动禁用

网络超时

Inspector.AvoInspector.networkTimeout = 5000;  // 默认 2000ms

日志开关

inspector.enableLogging(true);   // Dev 模式默认开启,Prod 默认关闭

属性值加密(Dev/Staging)

生成密钥对

npx avo-inspector generate-keys
输出公钥(传给 SDK)和私钥(存密码管理器,用于 Avo Dashboard 解密)。

初始化时启用

const inspector = new Inspector.AvoInspector({
  apiKey: "your-api-key",
  env: Inspector.AvoInspectorEnv.Dev,
  version: "1.0.0",
  publicEncryptionKey: "your-public-key-hex-string",
});

客户端验证(Dev/Staging)

当事件属性不符合 Tracking Plan 规则时,控制台输出:
[Avo Inspector] Validation errors for event "User Signed Up":
  [{ code: "RequiredMissing", propertyName: "email" }]

获取验证结果

// 异步等待(会阻塞直到 spec 拉取完毕)
const validated = await inspector.trackSchemaFromEvent("Event Name", {
  email: "user@example.com",
  age: 25,
});
// validated: [{ propertyName, propertyType, failedEventIds, passedEventIds }]

批量上报与 Gzip 压缩

  • 默认批量阈值:30 条事件,超出即触发发送
  • 默认 flush 超时:30 秒
  • CompressionStream:≥1KB 的请求体自动启用 Gzip 压缩( API)
  • 压缩失败的请求(浏览器不支持 / 失败)降级为原始发送,不阻塞
  • Dev 模式下批量自动禁用

高频坑点

❌ trackSchema 不触发客户端验证

客户端验证只绑定 trackSchemaFromEvent,trackSchema 只做批量上报,不校验。

❌ Lite 版不支持 publicEncryptionKey

TypeScript 编译时会报错。生产轻量部署用 Lite,但要加密/校验请用完整版。

❌ 多实例未加 suffix

同一项目里初始化两个 Inspector 实例,需要各自加 suffix 区分,否则事件会互相覆盖。

❌ 初始化写在 SSR 环境(Next.js / Nuxt)

SSR 环境下直接 import 会报 window is not defined。请改用 ssr-web-avo-inspector。

❌ React Native 用错了包

RN 应使用 react-native-avo-inspector,而非 avo-inspector。

❌ 事件去重(Lite + Codegen 混用)

Lite 版不支持事件去重。如果同时用了 Avo Codegen(已自动发 Schema)又手动调用 trackSchemaFromEvent 发送同名事件,会产生重复 Schema。混用场景请用完整版。

❌ 私钥泄露

私钥仅用于 Dashboard 解密,不要传入 SDK,不要提交到代码仓库。建议存 .env。