@flisk/analyze-tracking

中文文档
0.9.2发布于 2026/01/03MITCommonJS构建来源已验证近 30 天下载 1.4万

分析项目中的跟踪代码并生成数据计划

中文使用文档
文档目录8 节
  1. 为什么使用 @flisk/分析跟踪?
  2. 快速启动
  3. 密钥选项
  4. 自定义函数
  5. 什么是创造?
  6. 支持跟踪库和语言
  7. 支持库的 SDKs
  8. 贡献

@flisk/ 分析跟踪

通过分析跟踪代码和从Side、Amplition、Mixpanel等工具生成数据计划,自动记录您的分析设置

NPM version Tests

为什么使用 @flisk/分析跟踪?

📊 理解你的跟踪 - 毫无顾忌地分析你的密码库 track 电话可以让你看到所有的分析事件、属性和触发点。 别再猜测什么被跟踪了!

🔍 自动文档事件 – 生成一个完整的YAML schema,它能捕捉所有的事件和属性,包括在您代码库中执行的地方.

🕵️‍♂️ 音轨随时间变化 – 容易发现出乎意料的变化,或确保您的分析设置在更新过程中保持一致.

📚 填充数据目录 – 自动生成结构化文档, 帮助输入您的数据目录, 让每个人都更容易理解您的事件 .

快速启动

不安装就跑! 只要使用:

npx @flisk/analyze-tracking /path/to/project [options]

密钥选项

  • -g, --generateDescription: 生成字段描述( 默认 : false(中文(简体) )
  • -p, --provider <provider>: 指定提供者(选项: openai, (中文(简体) ), gemini(中文(简体) )
  • -m, --model <model>: 指定一个模型(前: gpt-4.1-nano, (中文(简体) ), gpt-4o-mini, (中文(简体) ), gemini-2.0-flash-lite-001(中文(简体) )
  • -o, --output <output_file>: 输出文件名称( 默认 ): tracking-schema.yaml(中文(简体) )
  • -c, --customFunction <function_signature>: 指定自定义跟踪功能的签名(参见 这里的指令(中文(简体) )
  • --format <format>: 输出格式, 或 yaml (违约)或 json。如果提供了无效的值,则CLI会以出错退出.
  • --stdout:将输出打印到终端而不是写入文件(与YAML和JSON同时工作)

🔑  重要内容: 使用时 generateDescription,您必须设置您作为环境变量使用的 LLM 提供者的适当证书。 OpenAI 用途 OPENAI_API_KEY 和 Google Vertex AI 应用 GOOGLE_APPLICATION_CREDENTIALS。 。 。 .

自定义函数

如果您拥有自己的内部跟踪器或可调用其他跟踪库的包装器功能,您可以使用 -c 或者说 --customFunction 选项.

标准自定义函数格式

您的函数签名应当采用以下格式:

yourCustomTrackFunctionName(EVENT_NAME, PROPERTIES, customFieldOne, customFieldTwo)
  • EVENT_NAME 是您正在跟踪的事件的名称 。 应该是一串或指向一串. 这是必要的.
  • PROPERTIES 是该事件属性的对象。 应当为对象/字典. 这是可选的.
  • 任何额外的参数都是您正在跟踪的其他字段 。 他们可以是任何类型的。 您为这些参数提供的名称将作为输出中的属性名称.

例如,如果您的函数在开头有一个用户ID参数,然后是事件名称和属性,那么您会通过以下参数:

yourCustomTrackFunctionName(userId, EVENT_NAME, PROPERTIES)

如果您的函数遵循标准格式 yourCustomTrackFunctionName(EVENT_NAME, PROPERTIES),你可以简单通过 yourCustomTrackFunctionName 改为 --customFunction 作为简写.

方法- Name- as- Event 格式

对于方法名称本身是事件名称的跟踪模式(例如, yourClass.yourEventName({...})),使用特别 EVENT_NAME 方法位置的占位符 :

yourClass.EVENT_NAME(PROPERTIES)

这个模式告诉分析者:

  • yourClass 是匹配的对象名称
  • 点后的方法名( 例如 ), viewItemList, (中文(简体) ), addToCart是事件名称
  • PROPERTIES 是属性对象( 如果未指定第一个参数默认)

示例

// Code in your project:
yourClass.viewItemList({ items: [...] });
yourClass.addToCart({ item: {...}, value: 100 });
yourClass.purchase({ userId: '123', value: 100 });

// Command:
npx @flisk/analyze-tracking /path/to/project --customFunction "yourClass.EVENT_NAME(PROPERTIES)"

这将检测:

  • 事件 : viewItemList 带有第一个参数属性
  • 事件 : addToCart 带有第一个参数属性
  • 事件 : purchase 带有第一个参数属性

说明: 此模式目前仅为JavaScript和TypeScript代码所支持.

多自定义函数

您也可以在多个自定义函数签名中通过 --customFunction 选项多次或以空格分隔的函数签名列表通过.

npx @flisk/analyze-tracking /path/to/project --customFunction "yourFunc1" --customFunction "yourFunc2(userId, EVENT_NAME, PROPERTIES)"
npx @flisk/analyze-tracking /path/to/project -c "yourFunc1" "yourFunc2(userId, EVENT_NAME, PROPERTIES)"
npx @flisk/analyze-tracking /path/to/project -c "yourClass.EVENT_NAME(PROPERTIES)" "customTrack(EVENT_NAME, PROPERTIES)"

什么是创造?

一个清晰的YAML计划,它显示你的事件被跟踪的地点,其属性,以及更多. 举个例子:

version: 1
source:
  repository: <repository_url>
  commit: <commit_sha>
  timestamp: <commit_timestamp>
events:
  <event_name>:
    description: <ai_generated_description>
    implementations:
      - description: <ai_generated_description>
        path: <path_to_file>
        line: <line_number>
        function: <function_name>
        destination: <platform_name>
    properties:
      <property_name>:
        description: <ai_generated_description>
        type: <property_type>

用这个来了解你的事件在代码中的位置 以及他们是如何被跟踪的.

您选择的 LLM 用于生成事件、 属性和执行的描述 .

见 计划.json 用于输出的JSON Schema.

支持跟踪库和语言

图书馆Java 脚本/ Type 脚本蟒鲁比走开挥发
谷歌分析✅❌❌❌✅
谷歌标签管理器✅❌❌❌✅
部分✅✅✅✅✅
混音板✅✅✅✅✅
广度✅✅❌✅✅
鲁德斯塔克✅✅✳️✳️✅
mp粒子✅❌❌❌✅
邮箱✅✅✅✅✅
任天堂✅❌❌❌✅
高点✅❌❌❌✅
雪地风✅✅✅✅❌
数据犬 RUM✅❌❌❌❌
自定义函数✅✅✅✅✅

QQ Ruderstack的SDK经常使用和Sependy相同的格式,因此Ruderstack事件可能被检测为Sependy事件.

支持库的 SDKs

谷歌分析

Java 脚本/ Type 脚本

gtag('event', '<event_name>', {
  '<property_name>': '<property_value>'
});

挥发

Analytics.logEvent("<event_name>", parameters: [
  "<property_name>": "<property_value>"
])
谷歌标签管理器

Java 脚本/ Type 脚本

dataLayer.push({
  event: '<event_name>',
  '<property_name>': '<property_value>'
});

// Or via window
window.dataLayer.push({
  event: '<event_name>',
  '<property_name>': '<property_value>'
});

挥发

dataLayer.push(["event": "<event_name>", "<property_name>": "<property_value>"])
部分

Java 脚本/ Type 脚本

analytics.track('<event_name>', {
  '<property_name>': '<property_value>'
});

蟒

analytics.track('<event_name>', {
  '<property_name>': '<property_value>'
})

鲁比

Analytics.track(
  event: '<event_name>',
  properties: {
    '<property_name>': '<property_value>'
  }
)

走开

client.Enqueue(analytics.Track{
  UserId: "user-id",
  Event:  "<event_name>",
  Properties: analytics.NewProperties().
    Set("<property_name>", "<property_value>"),
})

挥发

analytics.track(name: "<event_name>", properties: TrackProperties("<property_name>": "<property_value>"))
混音板

Java 脚本/ Type 脚本

mixpanel.track('<event_name>', {
  '<property_name>': '<property_value>'
});

蟒

mixpanel.track('<event_name>', {
  '<property_name>': '<property_value>'
})

鲁比

tracker.track('<distinct_id>', '<event_name>', {
  '<property_name>': '<property_value>'
})

走开

ctx := context.Background()
mp := mixpanel.NewApiClient("YOUR_PROJECT_TOKEN")
mp.Track(ctx, []*mixpanel.Event{
  mp.NewEvent("<event_name>", "", map[string]any{}{
    "<property_name>": "<property_value>",
  }),
})

挥发

Mixpanel.mainInstance().track(event: "<event_name>", properties: [
  "<property_name>": "<property_value>"
])
广度

Java 脚本/ Type 脚本

amplitude.track('<event_name>', {
  <event_parameters>
});

蟒

client.track(
  BaseEvent(
    event_type="<event_name>",
    user_id="<user_id>",
    event_properties={
      "<property_name>": "<property_value>",
    },
  )
)

走开

client.Track(amplitude.Event{
  UserID:    "<user_id>",
  EventType: "<event_name>",
  EventProperties: map[string]any{}{
    "<property_name>": "<property_value>",
  },
})

挥发

amplitude.track(
  eventType: "<event_name>",
  eventProperties: ["<property_name>": "<property_value>"]
)
鲁德斯塔克

Java 脚本/ Type 脚本

rudderanalytics.track('<event_name>', {
  <event_parameters>
});

蟒

rudder_analytics.track('<event_name>', {
  '<property_name>': '<property_value>'
})

鲁比

analytics.track(
  user_id: '<user_id>',
  event: '<event_name>',
  properties: {
    '<property_name>': '<property_value>'
  }
)

走开

client.Enqueue(analytics.Track{
  UserId: "<user_id>",
  Event:  "<event_name>",
  Properties: analytics.NewProperties().
    Set("<property_name>", "<property_value>"),
})

挥发

RSClient.sharedInstance()?.track("<event_name>", properties: [
  "<property_name>": "<property_value>"
])
mp粒子

Java 脚本/ Type 脚本

mParticle.logEvent('<event_name>', mParticle.EventType.<event_type>, {
  '<property_name>': '<property_value>'
});

挥发

let event = MPEvent(name: "<event_name>", type: .other)
event.customAttributes = [
  "<property_name>": "<property_value>"
]
MParticle.sharedInstance().logEvent(event)
邮箱

Java 脚本/ Type 脚本

posthog.capture('<event_name>', {
  '<property_name>': '<property_value>'
});

蟒

posthog.capture('distinct_id', '<event_name>', {
  '<property_name>': '<property_value>'
})
# Or
posthog.capture(
  'distinct_id',
  event='<event_name>',
  properties={
    '<property_name>': '<property_value>'
  }
)

鲁比

posthog.capture({
  distinct_id: '<distinct_id>',
  event: '<event_name>',
  properties: {
    '<property_name>': '<property_value>'
  }
})

走开

client.Enqueue(posthog.Capture{
  DistinctId: "<distinct_id>",
  Event:      "<event_name>",
  Properties: posthog.NewProperties().
    Set("<property_name>", "<property_value>"),
})

挥发

PostHogSDK.shared.capture("<event_name>", properties: [
  "<property_name>": "<property_value>"
])
任天堂

Java 脚本/ Type 脚本

pendo.track('<event_name>', {
  <event_parameters>
});

蟒

pendo.track('<event_name>', {
  '<property_name>': '<property_value>'
})

挥发

PendoManager.shared().track("<event_name>", properties: [
  "<property_name>": "<property_value>"
])
高点

Java 脚本/ Type 脚本

heap.track('<event_name>', {
  <event_parameters>
});

蟒

heap.track('<event_name>', {
  '<property_name>': '<property_value>'
})

挥发

Heap.shared.track("<event_name>", properties: [
  "<property_name>": "<property_value>"
])
数据犬 RUM

Java 脚本/ Type 脚本

datadogRum.addAction('<event_name>', {
  '<property_name>': '<property_value>'
});

// Or via window
window.DD_RUM.addAction('<event_name>', {
  '<property_name>': '<property_value>'
});

// Or via global DD_RUM
DD_RUM.addAction('<event_name>', {
  '<property_name>': '<property_value>'
});
雪花( 有缝隙的事件)

Java 脚本/ Type 脚本

tracker.track(buildStructEvent({
  action: '<event_name>',
  category: '<category>',
  label: '<label>',
  property: '<property>',
  value: <value>
}));

蟒

tracker.track(StructuredEvent(
  action="<event_name>",
  category="<category>",
  label="<label>",
  property_="<property>",
  value=<value>,
))

鲁比

tracker.track_struct_event(
  action: '<event_name>',
  category: '<category>',
  label: '<label>',
  property: '<property>',
  value: <value>
)

走开

tracker.TrackStructEvent(sp.StructuredEvent{
      Action:   sp.NewString("<event_name>"),
      Category: sp.NewString("<category>"),
      Label:    sp.NewString("<label>"),
      Property: sp.NewString("<property>"),
      Value:    sp.NewFloat64(<value>),
  })

贡献

我们正在积极改进这项一揽子计划。 找到窃听器了吗? 有特别请求吗? 打开一个问题或提交拉力请求!

Slack

版本与发布记录

@flisk/analyze-tracking 共发布 41 个版本,首次发布于 2024/08/19;过去 12 个月发布了 2 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.9.2latest2026/01/0310 个月前
0.9.12026/01/0310 个月前
0.9.02025/10/011.1 年前
0.8.82025/08/161.2 年前
0.8.72025/07/221.3 年前
0.8.62025/07/221.3 年前

关于 @flisk/analyze-tracking 的常见问题

@flisk/analyze-tracking 是什么?

分析项目中的跟踪代码并生成数据计划

如何安装 @flisk/analyze-tracking?

在项目目录运行 npm install @flisk/analyze-tracking,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 analyze-tracking,可以用 npx analyze-tracking 直接运行。

@flisk/analyze-tracking 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/flisk__analyze-tracking 是否存在。

@flisk/analyze-tracking 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@flisk/analyze-tracking 可以商用吗?

@flisk/analyze-tracking 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@flisk/analyze-tracking 的下载量有多少?

根据 npm 官方下载统计,@flisk/analyze-tracking 在 2026/10/15 – 2026/11/13 这 30 天内被下载 13,763 次,日均约 459 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@flisk/analyze-tracking 还在维护吗?

最新版本 0.9.2 发布于 2026/01/03(10 个月前);至今共发布 41 个版本,其中过去 12 个月发布了 2 个;首次发布于 2024/08/19。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。