@dcl/ecs

中文文档
7.33.0发布于 2026/11/06Apache-2.0TypeScriptCommonJS零依赖构建来源已验证近 30 天下载 2.1万

权力下放

中文使用文档
文档目录9 节
  1. 安装
  2. 使用量
  3. 技术概览
  4. 定义
  5. CRDT 执行
  6. 网络实体
  7. 性能特征
  8. 发展
  9. 文档

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

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

安装

npm install @dcl/ecs

使用量

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 方法标记各个同行之间应当同步的实体. 在背景中,它创建了一个网络实体和一个同步组件,并配有通过网络同步实体所需的所有信息.

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操作通过网络传输层传播更新

示例运输信息:

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

性能特征

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

发展

# Build
make build

# Test
make test

# Clean and reinstall
make clean && make install

文档

版本与发布记录

@dcl/ecs 共发布 1,361 个版本,首次发布于 2022/05/06;过去 12 个月发布了 318 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
7.33.0latest2026/11/066 天前
7.32.1-42077145652.commit-f6053ef2026/11/066 天前
7.32.1-42074770886.commit-f6053ef2026/11/066 天前
7.32.1-41691874543.commit-3063788auth-server2026/11/047 天前
7.31.1-41669733463.commit-b1b1d792026/11/048 天前
7.32.02026/11/048 天前

其他发布通道:ci → 7.8.16,protocol-squad → 7.25.1-30828532396.commit-0c215c3,experimental → 7.27.1-34382248832.commit-ca3b679,experimental-bevy → 7.31.1-40604676255.commit-cb3ed84,experimental-bevy-auth-server → 7.31.1-40606969412.commit-24c05c3,auth-server → 7.32.1-41691874543.commit-3063788。

关于 @dcl/ecs 的常见问题

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