# @elu-labs/analytics-browser 中文文档

规范地址：https://npmcn.com/package/%40elu-labs/analytics-browser/

版本：1\.412\.4
npm 元数据更新时间：2026-11-01T01:44:06.650Z
中文译文更新时间：2026-11-01T02:11:43.785Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40elu-labs/analytics-browser
原文对照：https://npmcn.com/package/%40elu-labs/analytics-browser/?lang=original
项目主页：https://elu.dev/
源码仓库：https://github.com/ELU-Labs/elu-js

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

- 包体积（解压后）：19.1 MB，20 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-09-19T10:21:13.088Z
- 最新版本发布：2026-11-01T01:44:06.487Z
- 已发布版本数：18（近 12 个月 18 个）

## 中文简介

ELU Analytics浏览器SDK。

## 安装

```sh
npm install @elu-labs/analytics-browser
```

也可以使用：`pnpm add @elu-labs/analytics-browser`、`yarn add @elu-labs/analytics-browser`、`bun add @elu-labs/analytics-browser`

## README

# 面向网络的ELU分析

捕获产品事件，将活动与用户和组织联系起来，进行评估 功能标志，并根据您的ELU隐私设置记录会话。

每个页面使用一种安装方法：ELU脚本或NPM客户端。都使用 你ELU **网站的关键**． 将帐户凭证和服务器机密保存在浏览器之外 代码。

## 安装脚本

将Web代码片段从您的ELU集成设置复制到您的站点中 `<head>`． 保留提供的URL和站点密钥：

```html
<script async src="https://elu.dev/v1/YOUR_SITE_KEY.js"></script>
```

该脚本为该站点初始化ELU。不要打电话 `init()`． 装载机后 运行过，使用过 `window.elu`：

```js
window.elu?.capture('checkout_started', { source: 'pricing_page' })
window.elu?.identify('user_123', { plan: 'pro' })
```

脚本是异步加载的。可选链接可以防止出现错误 没有装载，但是 **不排队呼叫**． 把重要的早起电话接到 脚本的 `load` 事件，或者使用下面的NPM客户端。一旦加载器 创建 `window.elu`，状态改变调用可以等待SDK启动；getter可能 还回来 `undefined`.

## NPM安装

安装软件包并使用ELU项目的Web设置中的站点密钥。

```sh
npm install @elu-labs/analytics-browser@latest
```

页面本身必须使用HTTPS，包括在本地开发期间。服务你的 使用受浏览器信任的证书的本地应用程序，或使用受信任的HTTPS 预览。初始化停留在HTTP localhost暂停；HTTPS集合 只有端点是不够的。

在您的同意管理器允许分析后，在浏览器代码中初始化一次； 并重用返回的客户端：

```ts
import { createEluClient } from '@elu-labs/analytics-browser'

const elu = createEluClient('YOUR_SITE_KEY')

elu.capture('checkout_started', { source: 'pricing_page' })
```

对于您自己域上的ELU集合实例，设置其HTTPS URL：

```ts
const elu = createEluClient('YOUR_SITE_KEY', {
    api_host: 'https://analytics.example.com',
})
```

实例必须提供站点配置和事件、标志和重播 配置授权的端点。它的记录器资产使用相同的基础 URL，除非你提供 `assets_host`． 云默认值不需要主机选项。两个 选项接受带有可选路径前缀的绝对HTTPS URL，例如 `https://analytics.example.com/elu`． 端点位于该前缀下； 凭据、查询、片段和不规则路径被拒绝。所选 在页面上第一次成功初始化客户端后，url不能更改。 被服务的配置不能将请求重定向到另一个源或外部 所选路径前缀。

### 自托管实例

有一个习惯 `api_host`，客户端不向任何ELU云原点发出请求；

| 请求 | ELU云 | 自定义 `api_host` |
| --- | --- | --- |
| 网站配置 `/sdk/v2/<key>/config` | `https://elu.dev` | `api_host` |
| 事件、标志和重播 | `https://ingest.elu.dev` | `api_host` |
| 录音机 `/sdk/recorder/<sha256>.js` | `https://assets.elu.dev` | `assets_host` 或者 `api_host` |
| 脚本存储模块 | `https://elu.dev` | `assets_host` 或者 `api_host` |

如果记录器主机没有交付记录器，例如因为a 网络过滤器或内容安全策略仅阻止该主机，即客户端 从事件主机获取相同的文件一次 `/static/elu-owned/sdk/recorder/<sha256>.js` 下 `https://ingest.elu.dev` 或者 你的 `api_host`． 它的字节必须与固定的摘要匹配。

客户端使用elu拥有的存储来标识和同意。现有的ELU状态为 保留;没有它的访问者会在网站下获得一个新的身份 `opt_out_capturing_by_default` 和 `respect_dnt` 设置。早期SDK存储 和回滚同步不再受支持。

页面可以直接加载实例的脚本：

```html
<script src="https://analytics.example.com/static/elu.js"></script>
<script>_eluSdk.init('YOUR_PROJECT_TOKEN', { api_host: 'https://analytics.example.com' })</script>
```

`init` 启动与代码片段相同的客户端并发布 `window.elu` 当 佩奇没有。它需要一个明确的 `api_host` 和一个HTTPS页面。这个 安装指南描述了页面选项、共享身份和同意。

当画布捕获打开时(页面的 `session_recording.captureCanvas` ？? 你的 实例的设置)并且该实例不隐藏图像和媒体， 记录器还发送画布像素作为回放帧。它启动了一个Web Worker 从一个 `blob:` URL，因此内容安全策略必须允许 `worker-src blob:` (或 `script-src blob:`)以及 `connect-src` 以你为例。没有它, 画布被忽略，重播的其余部分继续。创建了一个WebGL画布 录音开始前需要 `preserveDrawingBuffer`： `createEluClient` 为调用它之后创建的上下文提供它（除非翻页） Canvas（关闭），正如实例的安装代码段所做的那样，因此创建客户端 在你的地图或图表之前。

画布框架是图片，所以文本遮罩，输入遮罩和遮罩选择器 不适用于它们：绘制到画布中的文本被记录为像素，即使当 所有文本都被屏蔽。块规则，或隐藏图像和媒体，保留一个画布 不再重播。

当重放网络捕获打开时(该页的 `capture_performance` 和 `session_recording.recordHeaders`/`recordBody` ？? 实例的设置)，记录器将添加 页面的资源和导航计时，以及选中的方法， 的状态、标题和正文 `fetch` 和 `XMLHttpRequest` 请求。凭证 头文件总是记录为 `redacted`;大，二进制和敏感的外观 主体被音符代替；对实例的请求永远不会被记录。 重播屏蔽不适用于这些行，并且 `capture_network_requests` 不能控制他们。

当控制台录音是在（页的） `enable_recording_console_log` ？? 你的 实例的设置)，记录器也记录页面的设置 `console.*` 在重播中调用和未捕获的错误，如前面的脚本所做的： 每个条目最多保留其级别、堆栈跟踪和序列化的参数 十个2000个字符的字符串。控制台只在重播时打补丁 会话正在录制，并在会话停止时进行恢复。屏蔽设置不适用 控制台条目：无论文本规则是什么，都记录一个页面记录的内容 是为了之前的剧本。记录到控制台的DOM节点被记录为其 选择器路径，而不是它的标记，以及记录的输入、组合或键盘 事件不携带键入的文本，因此阻塞或屏蔽文本和输入值不携带 就这样留下这一页。页面的 `enable_recording_console_log` 决定: `true` 记录控制台，即使实例没有要求它， `false` 从不;省略，由实例的设置决定。相同的优先级，页 选择? ?项目拨款，适用于每个自动收集器，和一个 启用页面的一个运行时具有与授予的一个相同的屏蔽和边界。 重播从页面的完整快照开始，并在 每一次之后的第一次改变 `session_recording.full_snapshot_interval_millis` 的 活动，五分钟，除非书上另有说明。每个检查点开始一个 新的重播块，所以寻找土地在一个和一个玩家不能使用 渐进式的变化在下一个阶段又会变得完整。一大块不超过 5000个事件，不管它的字节大小。

包导出 `createEluClient` 和TypeScript类型 `EluClient`． ESM 和CommonJS的根导入。导入包则不会 初始化分析。只在浏览器中调用工厂，不要在呈现时调用 在服务器上。在组件框架中，为页面保留一个客户端 而不是在每次渲染或mount上创建一个。NPM客户端不创建 `window.elu`;保留返回的对象。

### 初始化选项

| 选项 | 默认的 | 行为 |
| --- | --- | --- |
| `api_host` | ELU云 | 您的实例的HTTPS URL，可选地带有路径前缀(`https://example.com/elu`)，用于其事件、标志和重播。站点权威必须在其下发布端点。 |
| `assets_host` | 实例起源，或用于云摄取起源的ELU云资产 | 可选的单独HTTPS URL，可选的带有路径前缀，用于记录器资产。 |
| `capture_pageview` | `'history_change'` | 初始页面浏览量加上历史API和哈希路由的变化。 `true` 只捕获初始页面浏览量； `false` 禁用自动页面浏览量。 |
| `capture_pageleave` | `'if_capture_pageview'` | `$pageleave` 在 `pagehide`，与左页的 `$prev_pageview_*` 持续时间和滚动值，由访问者在网站上加载的下一个页面提供。 `'if_capture_pageview'` 无论何时发送 `capture_pageview` 是在; `true` 总是; `false` 从来没有。 |
| `autocapture` | `true` | 根据站点策略和同意，启用自动交互捕获。对象也启用它，缩小到1.409.5 `url_allowlist`， `url_ignorelist`， `dom_event_allowlist`， `element_allowlist`， `css_selector_allowlist` 和 `css_selector_ignorelist` 列表; `element_attribute_ignorelist` 命名永远不会作为元素内容发送的属性。 |
| `capture_exceptions` | 项目设置为ELU | 未处理的错误和承诺拒绝，与堆栈框架（脚本URL没有查询，函数，行，列）。 `true` 打开这一页， `false` 要走;省略，项目的 `captureExceptions` 决定谁的压制规则在授予时适用。每种异常类型都有速率限制，就像1.409.5包中一样（每10秒重新填充10个令牌；突发最多发送9个）。手册 `captureException()` 仍然可用，不受限制。 |
| `capture_copied_text` | 你的实例 `captureCopiedText` | 集 `true` 用于 `$copy_autocapture` 当访问者复制或剪切时，您的实例是否授予复制的文本：所选文本（最多255个字符，卡片和社会安全号码删除）和 `$copy_type`． 集 `false` 无论你的情况如何，永远不要送出去；Unset，你的实例 `captureCopiedText` 决定。无论哪种方式，选择都是在实例的屏蔽和页面自己的重放屏蔽(`session_recording`的掩码和块选择器和类，以及 `elu-mask` 班)：什么都不送 `mask_all_text`，对于选择退出的访问者，当从祖先元素或选择的任何部分复制的元素达到无捕获标记时，实例掩码或阻塞的元素，图像元素(`img`， `picture`， `video`)，而您的实例阻塞图像，这是rrweb的默认值 `rr-block` 或者 `rr-mask` 类，或密码，隐藏或敏感命名字段，从任何表单字段（甚至在重播记录其值的地方），或从封闭的阴影树，嵌套在打开的或不，在每个浏览器中。只有页面显示的文本可以解释选择：一个携带表单字段的默认文本，一个关闭树的文本或隐藏文本不发送任何内容。如果选择太大而无法在20毫秒内判断，或者超过50,000个节点，则不发送任何内容，而是延迟复制。 |
| `capture_network_requests` | `true` | 集 `false` 停止报告获取/XHR请求。每个报告只携带方法、状态、时间和一个擦除路径——从不查询字符串、标题或正文。每页最多200页。 |
| `capture_performance` | Web vital和重放网络定时：项目在ELU中的设置采样关闭，除非在ELU中启用 | `true` 打开Web vital、重播网络定时、内存和长任务示例； `false` 把它们都关掉；省略，由项目决定。一个对象集合 `web_vitals` 和 `network_timing` （每人决定页码）， `web_vitals_allowed_metrics`， `memory` 和 `long_tasks` 单独的;见下文。 |
| `capture_heatmaps` | 项目在ELU中的热图设置 | `true` 或者 `{ flush_interval_milliseconds }` （默认为5000）发送点击，愤怒点击，死点击和鼠标移动位置为 `$$heatmap` 在这一页； `false` 发送没有;省略，项目的 `captureHeatmaps` 决定。坐标。 |
| `enable_recording_console_log` | 项目设置为ELU | 控制台录音回放。 `true` 记录该页上该页的控制台调用， `false` 从不;省略，项目的 `captureConsole` 决定。 |
| `disable_session_recording` | `false` | `true` 即使您的实例授予重播，也会在此页面上保持关闭重播。事件不受影响。没有办法把它重新打开。 |
| `session_recording` | `{ full_snapshot_interval_millis: 300000 }` | `full_snapshot_interval_millis`：重放页面的完整快照之间的活动毫秒，保持在10秒到30分钟之间。 `recordHeaders` 和 `recordBody` 决定页面的重放网络标头和正文(`true` , `false` 要走;省略，项目的 `captureNetwork`); `captureCanvas: { recordCanvas, canvasFps, canvasQuality }` 在实例的遮罩内，以相同的方式决定画布像素，有界（每秒1到12帧，质量从0到1）。在实例掩码之上的页面掩码，只会更严格： `maskAllInputs: true`， `maskInputOptions`， `maskTextSelector`， `maskTextClass`， `blockSelector`， `blockClass`， `ignoreClass`， `ignoreSelector`． RegExp类是以精确的类形状读取的 `/^(a|b)$/` 只有。其他成员被忽略。 |
| `mask_all_text` | 你的实例 `captureElementContent` | `true` 屏蔽重播中的每个文本节点，并将元素文本排除在交互事件之外，无论您的实例授予什么。 `false` 在您的实例的屏蔽范围内，无论您的实例是否授予它，都在该页的交互事件上发送元素文本（如果没有，则屏蔽所有文本）；它永远不会揭开重播的面纱。省略，由你的实例决定。 |
| `mask_all_element_attributes` | 你的实例 `captureElementContent` | `true` 将元素属性排除在交互事件之外，无论您的实例授予什么。 `false` 为此页发送它们，无论您的实例是否授予它们 `autocapture` `element_attribute_ignorelist`． 省略，由你的实例决定。 |
| `loaded(client)` | 无 | 在本地启动之后和初始自动页面浏览之前运行。这并不意味着配置、标志或交付已经完成。没有等待异步回调。 |
| `before_send` | 无 | 一个函数，或一个按顺序调用的函数数组，在每个事件被排队之前运行： `capture`， `captureException` 自动事件也一样。它接收 `{ event, properties, $set?, $set_once?, timestamp }`，将已注册的超级属性合并到事件自己的超级属性下，并返回它，在适当位置编辑或替换，或 `null` 放弃事件；被移除的超级属性保持被移除状态。身份更改作为先前脚本为其发送的事件(`$identify` 与 `$set`/`$set_once`， `$set` 与 `properties.$set`/`$set_once`， `$create_alias`， `$groupidentify` 与 `properties.$group_set`); `null` 丢掉零钱。抛出的钩子会丢弃带有一个控制台错误的事件。重放数据不通过它。 |
| `property_denylist` | `[]` | 从每个事件的属性（包括已注册的超级属性）中删除的属性名 `sanitize_properties` 和 `before_send`． 早先的脚本是 `property_blacklist` 仍然在它前面读取和合并。 |
| `sanitize_properties` | 无 | 弃用;使用 `before_send`. `(properties, eventName)` 返回要发送的属性；在否定者之后和之前运行 `before_send`. |

脚本加载器选择它的启动选项；改变NPM选项则不然 配置脚本安装。重播和隐私设置来自ELU；一个 页面只能添加到它们。元素 `elu-mask` 类有 他们的文字被掩盖了， `elu-no-capture` 记录为 占位符和输入 `elu-ignore-input` 有 无论该实例的规则如何规定，他们的改变都被忽略了。一个 `session_recording` 成员，记录器不能支持精确类形状之外的RegExp类 `/^(a|b)$/`，一个选择器，它不进行解析或被未关闭的选项打开 注释、字符串、括号或括号或尾随的反斜杠)保持回放 在该页上关闭，而不是记录要求隐藏的内容，以及运行时 在控制台中为选项命名一次； `maskTextFn` 和 `maskInputFn` 不 运行时，他们将重写的内容被屏蔽如下。没有 `set_config()` 或在此客户机上覆盖每个请求端点：较早的 对于所针对的页面，返回对象接受脚本的名称 它, `set_config()` 被控制台警告忽略，并且 `startSessionRecording()` / `stopSessionRecording()` 切换这一页的记录器 在实例允许的范围内。看到 [早期的脚本方法](https://npmcn.com/package/docs/web/api.md#earlier-script-methods).

## Web vital和可选的性能示例

当网页生命体征在（页面的） `capture_performance` ？? 你的ELU项目 `captureWebVitals`)，每个页面都会报告其核心Web vital （LCP， FCP， CLS和INP，或项目列出的指标）作为一个或多个 `$web_vitals` 事件携带值，它们的评级和页面位置 只有。较早完成的指标会在短暂延迟后一起发送；CLS和 INP也会在页面可见时发送，每次它们发生变化，因为 一旦页面被隐藏，捕获就会停止。一页在隐藏时开始绘画 报告没有油漆时间。页面的选项决定两个方向： `capture_performance: true` 或者 `{ web_vitals: true }` 即使在哪里也能打开它们 该项目并没有授予他们(每一个指标，缩小到 `web_vitals_allowed_metrics`)， `{ web_vitals: false }` 或者 `capture_performance: false` 关掉它们；省略，项目决定，和 `web_vitals_allowed_metrics` 缩小了它的度量。

当您的ELU站点配置和本地配置都不启用时，性能采样将关闭 初始化选项启用它。对于NPM客户端，你可以显式地选择：

```ts
const elu = createEluClient('YOUR_SITE_KEY', {
    capture_performance: {
        memory: true,
        long_tasks: true,
        sample_interval_ms: 30_000,
    },
})
```

TypeScript的选项类型是 `PerformanceCaptureConfig`． 每个本地设置 覆盖其远程对应； `true` 同时启用度量和 `false` 禁用两者，以及Web vital。一个 `capture_performance` 这就是价值 布尔值和对象都不能关闭样本。间隔默认为 30秒，最少5秒。 如果更新的站点配置省略了性能设置，则先前的远程 有选择地加入结束;显式本地覆盖仍然需要有效的捕获权限。

样本使用常态 `$performance_sample` 事件队列。记忆的测量 仅在浏览器公开堆统计信息时可用；长期任务 测量要求 `PerformanceObserver` 支持。不支持的测量 省略了。当页面被隐藏时，Collection会暂停并丢弃旧的 当身份、同意或捕获配置更改时测量窗口。 选择退出，阻止捕获和过期配置阻止采样。

关于隐藏或导航的最后一个示例是尽力而为的。浏览器生命周期和 同意检查仍然适用；关闭选项卡或进程可以阻止排队或 交付。此功能不保证卸载样例或进程死亡 复苏。

## 识别用户和组织

使用应用程序稳定的内部ID，而不是电子邮件地址、姓名或电话 号码。在登录后和相关自定义事件之前进行识别：

```ts
elu.identify('user_123', { plan: 'pro' }, { signup_source: 'website' })
elu.group('organization', 'org_456', { plan: 'pro' })
elu.capture('project_created', { template: 'blank' })

// On sign-out:
elu.reset()
```

第三个论点 `identify` 仅在不存在时设置person属性。使用 `setPersonProperties` 用于以后的更改。 `group` 关联后续活动 对于这种群体类型； `resetGroups` 清除组关联。

`reset()` 开始一个新的匿名身份，并清除超级属性，组 标志上下文。它保留了设备ID (`$device_id`)，除非被称为 `reset(true)`，并保留访客选择退出的权利。身份重置是 不同意恢复捕获；使用您的同意管理器来做出决定。

## 同意及私隐

如果在任何SDK活动之前都需要征得同意，请等待加载脚本或调用 `createEluClient` 直到获得同意。初始化可以打开浏览器 存储和请求配置；之后选择退出不能撤销这些 最初的行动。

对于初始化的客户端：

```ts
elu.opt_out_capturing()

// Only when the visitor explicitly opts back in:
elu.opt_in_capturing({ captureEventName: false })
```

调用 `opt_in_capturing()` 没有选项也请求一个 `$opt_in` 事件。 选择退出抑制捕获，标志评估和重放。它不删除数据 已经交付给欧盟。

保存密码、付款详情、令牌及敏感个人资料 事件属性、id和异常消息。重播屏蔽无法进行消毒 任意自定义事件属性。

会话回放是为每个项目单独激活的。请联系ELU技术支持 它不可用；安装包不启用录音。重播 还需要同意，一个站点配置允许它，并符合条件 浏览器和会话。查看网站的输入、文本、图像和块化元素 设置在ELU；不要假设默认情况下所有可见的文本和图像都是屏蔽的。

在回放中掩蔽总是意味着保持长度 `*`． 遮罩文本节点保持 它是空格，并且所有其他字符都由 `*`，以及一个屏蔽输入 价值合二为一 `*` 每个字符，所以 `Team settings` 记录为 `**** ********` 和7个字符的密码为 `*******`． 遮罩内容为 从来没有空白或掉落：重放保持页面的布局，没有任何 原始页除了它的长度。HTML注释总是隐藏在 同样的方式。阻塞是移除内容的单独规则：被阻塞的元素 被记录为相同大小的空占位符，并且被阻止的图像保持没有 `src`.

## 功能标志

标志异步加载。 `undefined` 指没有可用价值； 将其与显式函数分开处理 `false`：

```ts
const unsubscribe = elu.onFeatureFlags((_keys, _variants, context) => {
    if (context?.errorsLoading) return
    const enabled = elu.isFeatureEnabled('new_checkout', { defaultValue: false })
    // Render the new checkout only when enabled === true.
})

// When the component is disposed:
unsubscribe()
```

使用 `getFeatureFlag` 对于布尔或字符串变体， `getFeatureFlagPayload` 用于 它的JSON有效负载，或者 `getFeatureFlagResult` 用于 `{ key, enabled, variant, payload }`． Flag读数可以报告暴露；通过 `{ send_event: false }` 到一个 当您不想要曝光事件时，读取标志/特性。使用 `reloadFeatureFlags()` 请求新的值。特性标志不是 服务器端授权边界。

一旦一个求值被加载，每个事件都会携带它： `$feature/<key>` 与 每个被求值的标志的值和 `$active_feature_flags` 带着谁的钥匙 价值就是真理。它们是从加载的求值中派生出来的，从不存储为 超级属性 `reset()` 还有身份变更清除他们，直到 下一次评估落地；超级属性的改变(`register`， `register_once`， `unregister`)保存加载的求值，直到它自己的过期或 下一次求值无需新的请求，因此一次读取或一次事件在同一回合进行 仍然看到它；事件本身同名的属性获胜，而戳记获胜 符合捕获属性预算。 `$feature_flag_called` 也 命名它所报告的评价： `$feature_flag_request_id`， `$feature_flag_evaluated_at` （Unix纪元以来的毫秒数）和 `$used_bootstrap_value`，当值来自缓存的求值时，为true 而不是本页收到的回复。每个值报告一次 跨页面加载（分类帐为）的匿名访问者的标志键和值 保存在 `localStorage` 每个站点密钥，1.409.5包保留 `$flag_call_reported`): `identify()` 把它保存起来 `reset()` 开始新的生活。 每次更新配置时（最多5分钟）都会重新评估标志 分开)。

## 其他常用操作

```ts
elu.register({ app_area: 'dashboard' }) // Properties on later events
elu.register_once({ first_campaign: 'docs' })
elu.unregister('app_area')
elu.setPersonProperties({ plan: 'business' })
elu.captureException(new Error('Upload failed'), { operation: 'upload' })
```

`capture()` 不返回送货收据或承诺。确认与a的集成 ELU非敏感试验事件；只需下载脚本或返回方法即可 不能证明是摄入。

## 许可证

ELU的捐款可在 [MIT许可证](https://npmcn.com/package/%40elu-labs/analytics-browser/LICENSE),包括 商业用途、修改和再分发。

第三方部分保留其原始的Apache-2.0、MIT或ISC术语 归因 [THIRD\_PARTY\_NOTICES.txt](https://npmcn.com/package/%40elu-labs/analytics-browser/THIRD_PARTY_NOTICES.txt)． ELU的 麻省理工术语不能取代上游术语。包括 `LICENSE`， `NOTICE-ELU`, `THIRD_PARTY_NOTICES.txt` 在重新分配 SDK。发布的npm版本保留了包含在其存档中的术语。

## 常见问题

### @elu-labs/analytics-browser 是什么？

ELU Analytics浏览器SDK。

### 如何安装 @elu-labs/analytics-browser？

在项目目录运行 npm install @elu-labs/analytics-browser，或使用 pnpm add / yarn add / bun add。

### @elu-labs/analytics-browser 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @elu-labs/analytics-browser 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @elu-labs/analytics-browser 可以商用吗？

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

### @elu-labs/analytics-browser 还在维护吗？

最新版本 1\.412\.4 发布于 2026/11/01（2 天前）；至今共发布 18 个版本，其中过去 12 个月发布了 18 个；首次发布于 2026/09/19。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

