# @flisk/analyze-tracking 中文文档

规范地址：https://npmcn.com/package/%40flisk/analyze-tracking/

版本：0\.9\.2
npm 元数据更新时间：2026-01-03T03:55:00.041Z
中文译文更新时间：2026-11-14T23:25:32.686Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40flisk/analyze-tracking
原文对照：https://npmcn.com/package/%40flisk/analyze-tracking/?lang=original
项目主页：https://github.com/fliskdata/analyze-tracking#readme
源码仓库：https://github.com/fliskdata/analyze-tracking

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：400 kB，67 个文件
- 模块格式：CommonJS
- TypeScript 类型：未声明
- 运行依赖：17 个
- 首次发布：2024-08-19T14:42:47.170Z
- 最新版本发布：2026-01-03T03:54:59.653Z
- 近 30 天下载量：13763（2026-10-15 至 2026-11-13，npm 官方下载统计）
- 已发布版本数：41（近 12 个月 2 个）

## 中文简介

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

## 安装

```sh
npm install @flisk/analyze-tracking
```

也可以使用：`pnpm add @flisk/analyze-tracking`、`yarn add @flisk/analyze-tracking`、`bun add @flisk/analyze-tracking`

## README

# @flisk/ 分析跟踪

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

[![NPM version](https://img.shields.io/npm/v/@flisk/analyze-tracking.svg)](https://www.npmjs.com/package/@flisk/analyze-tracking) [![Tests](https://github.com/fliskdata/analyze-tracking/actions/workflows/tests.yml/badge.svg?branch=main)](https://github.com/fliskdata/analyze-tracking/actions/workflows/tests.yml)

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

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

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

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

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

## 快速启动

不安装就跑! 只要使用:

```sh
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>`: 指定自定义跟踪功能的签名(参见 [这里的指令](https://npmcn.com/package/%40flisk/analyze-tracking/#readme-custom-functions)(中文(简体) )
-   `--format <format>`: 输出格式, 或 `yaml` (违约)或 `json`。如果提供了无效的值,则CLI会以出错退出.
-   `--stdout`:将输出打印到终端而不是写入文件(与YAML和JSON同时工作)

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

### 自定义函数

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

#### 标准自定义函数格式

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

```js
yourCustomTrackFunctionName(EVENT_NAME, PROPERTIES, customFieldOne, customFieldTwo)
```

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

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

```js
yourCustomTrackFunctionName(userId, EVENT_NAME, PROPERTIES)
```

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

#### 方法- Name- as- Event 格式

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

```js
yourClass.EVENT_NAME(PROPERTIES)
```

这个模式告诉分析者:

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

**示例**

```typescript
// 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` 选项多次或以空格分隔的函数签名列表通过.

```sh
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计划,它显示你的事件被跟踪的地点,其属性,以及更多. 举个例子:

```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](https://npmcn.com/package/%40flisk/analyze-tracking/schema.json) 用于输出的JSON Schema.

## 支持跟踪库和语言

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

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

## 支持库的 SDKs

谷歌分析

**Java 脚本/ Type 脚本**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**鲁比**

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

**走开**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**鲁比**

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

**走开**

```go
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>",
  }),
})
```

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**走开**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**鲁比**

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

**走开**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**鲁比**

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

**走开**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**挥发**

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

**Java 脚本/ Type 脚本**

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

**蟒**

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

**挥发**

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

**Java 脚本/ Type 脚本**

```js
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 脚本**

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

**蟒**

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

**鲁比**

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

**走开**

```go
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](https://img.shields.io/badge/Join%20Us%20on%20Slack-Flisk%20Community-611f69.svg?logo=slack)](https://join.slack.com/t/fliskcommunity/shared_invite/zt-354hesfnm-BbNzveERo9C4JwVQEWvXoA)

## 常见问题

### @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 和提交记录判断。

