# @dcl/ecs 中文文档

规范地址：https://npmcn.com/package/%40dcl/ecs/

版本：7\.33\.0
npm 元数据更新时间：2026-11-05T17:52:52.944Z
中文译文更新时间：2026-11-11T17:29:51.215Z
软件包许可：Apache-2\.0

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

原始 npm 页面：https://www.npmjs.com/package/%40dcl/ecs
原文对照：https://npmcn.com/package/%40dcl/ecs/?lang=original
项目主页：https://github.com/decentraland/ecs#readme
源码仓库：https://github.com/decentraland/js-sdk-toolchain

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

- 包体积（解压后）：2.5 MB，1022 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2022-05-06T15:20:17.396Z
- 最新版本发布：2026-11-05T17:52:52.549Z
- 近 30 天下载量：20698（2026-10-12 至 2026-11-10，npm 官方下载统计）
- 已发布版本数：1361（近 12 个月 318 个）

## 中文简介

权力下放

## 安装

```sh
npm install @dcl/ecs
```

也可以使用：`pnpm add @dcl/ecs`、`yarn add @dcl/ecs`、`bun add @dcl/ecs`

## README

# @dcl/ ecs (中文(简体) )

Decentrand场景的核心实体组件系统包。 执行基于 CRDT 的ECS 架构,用于网络化场景状态.

## 安装

```bash
npm install @dcl/ecs
```

## 使用量

```typescript
import { engine } from '@dcl/ecs'

// Create entity
const entity = engine.addEntity()

// Define and add component
const Health = engine.defineComponent(1, {
  current: Number,
  max: Number,
  regeneration: Number
})

Health.create(entity, {
  current: 100,
  max: 100,
  regeneration: 1
})

// Create system
engine.addSystem((dt: number) => {
  for (const [entity, health] of engine.mutableGroupOf(Health)) {
    if (health.current < health.max) {
      health.current = Math.min(health.max, health.current + health.regeneration * dt)
    }
  }
})
```

## 技术概览

### 定义

构件以独特的ID和计划来定义. 计划用于:

-   生成类型脚本
-   创建二进制序列器/ 剪接器
-   设置 CRDT 操作

### CRDT 执行

ECS使用 CRDTs(无冲突重复数据类型),可以在多个引擎实例中实现确定状态更新:

-   组件更新是带有逻辑时间戳的 CRDT 操作
-   通过交换 CRDT 操作可以同步多个引擎实例
-   解决冲突使用时间戳和实体身份证,以确保一致性
-   二进制传输格式最小化网络间接费用

### 网络实体

对于多人场景 `syncEntity` 方法标记各个同行之间应当同步的实体. 在背景中,它创建了一个网络实体和一个同步组件,并配有通过网络同步实体所需的所有信息.

```typescript
import { engine, NetworkEntity } from '@dcl/ecs'

// Create a networked entity
const foe = engine.addEntity()
NetworkEntity.create(foe)

// Components on this entity will be synced across peers
Health.create(foe, { current: 100, max: 100, regeneration: 1 })
```

每个对等方都维持自己的引擎实例. 使用网络实体时 :

-   拥有者同伴可以修改实体的组件
-   其他同行收到只读的复制件
-   利用CRDT操作通过网络传输层传播更新

示例运输信息:

```typescript
{
  entityId: number
  componentId: number
  timestamp: number
  data: Uint8Array // Serialized component data
}
```

### 性能特征

-   零分配组件
-   用于高效更新的肮脏状态跟踪
-   网络运输二进制序列化
-   断层部分业务

## 发展

```bash
# Build
make build

# Test
make test

# Clean and reinstall
make clean && make install
```

## 文档

-   [ECS指南](https://docs.decentraland.org/creator/development-guide/sdk7/entities-components/)
-   [参考文献](https://docs.decentraland.org/creator/development-guide/sdk7/components/)
-   [ADR-117: CRDT 议定书](https://adr.decentraland.org/adr/ADR-117)

## 常见问题

### @dcl/ecs 是什么？

权力下放

### 如何安装 @dcl/ecs？

在项目目录运行 npm install @dcl/ecs，或使用 pnpm add / yarn add / bun add。

### @dcl/ecs 支持 TypeScript 吗？

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

### @dcl/ecs 支持 ESM 还是 CommonJS？

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

### @dcl/ecs 可以商用吗？

@dcl/ecs 使用 Apache-2\.0 许可。宽松许可：允许商业使用、修改和再分发，并附带明确的专利授权；分发时需保留许可与 NOTICE 文件，修改过的文件要注明改动。以上为概括，不构成法律意见，请以许可原文为准。

### @dcl/ecs 的下载量有多少？

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

### @dcl/ecs 还在维护吗？

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

