# @canvas-js/core 中文文档

规范地址：https://npmcn.com/package/%40canvas-js/core/

版本：0\.16\.1
npm 元数据更新时间：2025-07-30T15:05:57.954Z
中文译文更新时间：2026-11-09T17:10:55.193Z
软件包许可：未声明

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

原始 npm 页面：https://www.npmjs.com/package/%40canvas-js/core
原文对照：https://npmcn.com/package/%40canvas-js/core/?lang=original

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

- 包体积（解压后）：163 kB，54 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.0\.0
- 运行依赖：43 个
- 首次发布：2022-05-16T05:06:33.504Z
- 最新版本发布：2025-07-30T15:05:57.736Z
- 近 30 天下载量：2195（2026-10-09 至 2026-11-07，npm 官方下载统计）
- 已发布版本数：263（近 12 个月 0 个）

## 中文简介

此套件导出 a `Canvas` 类,可用于手动即时 Canvas 应用程序.

## 安装

```sh
npm install @canvas-js/core
```

也可以使用：`pnpm add @canvas-js/core`、`yarn add @canvas-js/core`、`bun add @canvas-js/core`

## README

# @canvas-js/ core (中文(简体) )

此套件导出 a `Canvas` 用于手动的类 即时化 Canvas 应用程序 .

如果您想要精细控制何时使用此软件包 应用程序开始/停止。 否则,你可以使用 `useCanvas` 内 `@canvas-js/hooks`,它具有相同的 API,但处理初始化 内在反应为你.

## 目录

-   [安装](https://npmcn.com/package/%40canvas-js/core/#readme-installation)
-   [使用量](https://npmcn.com/package/%40canvas-js/core/#readme-usage)
-   [API 密码](https://npmcn.com/package/%40canvas-js/core/#readme-api)

## 安装

```
$ npm i @canvas-js/core
```

## 如何运作

在引擎盖下,每个 `Canvas` 应用程序复制并执行 a 已签名动作的日志, 来源于 GossipLog, 有读取/写入访问权限 改为模型DB数据库.

每项申请都接受若干论点:

-   `contract` 选择扩展的类 `Contract`,或含有 JS 模块的字符串,导出扩展的默认类 `Contract`。 。 。 .
-   `topic` 取一个字符串
-   `snapshot` (可选) `Snapshot` 为应用程序提供初始数据库内容的对象.
-   `signers` (可选的)需要一系列的签名符,这允许在应用程序中添加不同的认证方法.

使用 `await Canvas.initialize` 以启动应用程序。 (关于同步初始化,参见 Canvas Loadable.ts.)

要将应用程序连接到其它同步端点, 请使用 `app.connect()` 改为 启动 WebSocket 连接, 或 `app.listen()` 来聆听 服务器的 WebSocket 连接 .

或者说,用 `app.startLibp2p()` 启动 libp2p 节点.

程序启动后,您可以使用 `app.actions` 访问 您定义的每个动作 .

行动呼吁会签署并代理合同.

```ts
import { Canvas, Contract } from "@canvas-js/core"

class Chat extends Contract<typeof Chat.models> {
  static models = {
    posts: {
      id: "primary",
      user: "string",
      content: "string",
      updated_at: "integer",
    },
  }

  async createPost(content: string) {
    const { id, chain, address, timestamp, db } = this
    const user = [chain, address].join(":")
    await db.set("posts", { id, user, content, updated_at: timestamp })
  }

  async deletePost(postId: string) {
    const { chain, address, db } = this
    const post = await db.get("posts", postId)
    if (post === null) {
      return
    }

    const user = [chain, address].join(":")
    if (post.user !== user) {
      throw new Error("not authorized")
    }

    await db.delete("posts", postId)
  }
}

const app = await Canvas.initialize({
  topic: "example.xyz",
  contract: Chat,
})

await app.actions.createPost("hello world!")
const results = await app.db.query("posts", {})
// [
//   {
//     id: '09p5qn7affkhtbflscr663tet8ddeu41',
//     user: 'did:pkh:eip155:1:0x79c5158f81ebb0c2bcF877E9e1813aed2Eb652B7',
//     content: 'hello world!',
//     updated_at: 1698339861041
//   }
// ]
```

## API 密码

@././packages/core/src/types.ts

## 常见问题

### @canvas-js/core 是什么？

此套件导出 a Canvas 类,可用于手动即时 Canvas 应用程序\.

### 如何安装 @canvas-js/core？

在项目目录运行 npm install @canvas-js/core，或使用 pnpm add / yarn add / bun add。

### @canvas-js/core 支持 TypeScript 吗？

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

### @canvas-js/core 支持 ESM 还是 CommonJS？

以 ES Module 形式发布，推荐使用 import 引入。在 CommonJS 项目中，Node\.js 20\.19\+ / 22\.12\+ 可以直接 require\(\) 不含顶层 await 的 ES Module，更早的版本需要改用动态 import\(\)。

### @canvas-js/core 需要什么版本的 Node\.js？

package\.json 的 engines 字段要求 Node\.js \>=22\.0\.0。版本不符时 npm 默认只给出警告，开启 engine-strict 后会拒绝安装。

### @canvas-js/core 可以商用吗？

@canvas-js/core 使用 未声明 许可。package\.json 没有声明许可证。没有许可证的代码默认保留全部权利，商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括，不构成法律意见，请以许可原文为准。

### @canvas-js/core 的下载量有多少？

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

### @canvas-js/core 还在维护吗？

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

