# @g9tm/syncdata 中文文档

规范地址：https://npmcn.com/package/%40g9tm/syncdata/

版本：1\.5\.23
npm 元数据更新时间：2026-11-15T14:21:10.398Z
中文译文更新时间：2026-11-15T20:25:57.490Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：2.5 MB，155 个文件
- 模块格式：ES Module
- TypeScript 类型：包内自带
- Node.js 要求：\>=22\.12\.0
- 运行依赖：0 个
- peer 依赖：@msgpack/msgpack ^2\.8\.0，@microsoft/signalr ^10\.0\.0，@g9tm/signalr-supernetcore-client ^2\.11\.0，@microsoft/signalr-protocol-msgpack ^10\.0\.0
- 首次发布：2026-10-05T23:04:31.161Z
- 最新版本发布：2026-11-15T14:21:10.052Z
- 近 30 天下载量：4255（2026-10-16 至 2026-11-14，npm 官方下载统计）
- 已发布版本数：29（近 12 个月 29 个）

## 中文简介

用于Lynx,节点和浏览器的G9SyncData.NET客户端的TypeScript双胞胎:同步引擎,G9RowBatch协议,SQLite客户端商店(与.NET商店相同)和信号R传输.

## 安装

```sh
npm install @g9tm/syncdata
```

也可以使用：`pnpm add @g9tm/syncdata`、`yarn add @g9tm/syncdata`、`bun add @g9tm/syncdata`

## README

# @ g9tm/ 同步数据

类型脚本双 [G9 同步数据](https://github.com/ImanKari/G9SyncData) .NET客户端: 离线第一次同步 一个设备的 SQLite 数据库和一个 PostgreSQL 服务器,用于 **林克丝** 应用程序(与 [`@g9tm/syncdata-lynx`](https://npmcn.com/package/%40g9tm/lynx/README.md)),节点和浏览器. 相同的协议,相同的引擎行为,和 **同样的 本地数据库** 作为.NET客户端——MAUI应用程序所写的数据库在Lynx应用程序中打开并持续同步.

| 入境点 | 什麽 |
| --- | --- |
| `@g9tm/syncdata` | 发动机(`G9SyncEngine`),客户端模式,协议(DTOs,G9RowBatch帧),出错,摘要 |
| `@g9tm/syncdata/sqlite` | sQLite 客户端商店 (`G9SqliteSyncStore`超过任意 `G9SqliteDriver` |
| `@g9tm/syncdata/signalr` | 信号传输( R)`G9SignalRSyncTransport`), JSON 和 MessagePack, 包含精确的64位值 |
| `@g9tm/syncdata/node` | 节点: sqlite 驱动程序(`nodeSqliteDriver`brotli通过节点:zlib(`useNodeBrotli`(中文(简体) ) |
| `@g9tm/syncdata/testing` | 任何运输过程中的过错注射(`G9FaultInjectingTransport`(中文(简体) ) |
| `@g9tm/syncdata/brotli-js` | 纯 JavaScript Brotli 解码器,用于没有本地编码的运行时间 |

1.2.2版本——始终等于.NET包'版本. 什么样的东西可以说明什么, 以及每一个有意的区别: [议会.md](https://npmcn.com/package/%40g9tm/syncdata/PARITY.md)。 。 。 .

## 安装

```bash
npm install @g9tm/syncdata @g9tm/signalr-supernetcore-client @microsoft/signalr @microsoft/signalr-protocol-msgpack @msgpack/msgpack
```

SignalR 包是可选的同位素:只有 `@g9tm/syncdata/signalr` 需要他们.

## 使用( 节点)

```ts
import { G9ESyncColumnType as T, G9SyncClientModelBuilder, G9SyncEngine, G9SyncParameters } from '@g9tm/syncdata';
import { G9SqliteSyncStore } from '@g9tm/syncdata/sqlite';
import { G9SignalRSyncTransport } from '@g9tm/syncdata/signalr';
import { nodeSqliteDriver, useNodeBrotli } from '@g9tm/syncdata/node';

useNodeBrotli(); // the server compresses frames with Brotli

// Tables in the order the .NET source generator emits them (entity type name), so both clients number them alike.
const model = new G9SyncClientModelBuilder()
  .table('farm.Pot', 'Pot', (t) =>
    t.key('Id').column('SiteId', T.Guid, false).column('Code', T.String, false).column('Weight', T.Decimal).index(null, false, 'SiteId'))
  .table('farm.Site', 'Site', (t) => t.key('Id').column('Name', T.String, false))
  .build();

const store = new G9SqliteSyncStore({ driver: nodeSqliteDriver(), databasePath: './device.db' });
const transport = new G9SignalRSyncTransport({ url: 'https://sync.example.com/g9sync', accessTokenFactory: () => token });
const engine = new G9SyncEngine(store, transport, model, { appVersion: '1.0.0' });

await engine.initialize();
await engine.subscribe('sites');
await engine.subscribe('site-pots', new G9SyncParameters().setGuid('SiteId', siteId));
const run = engine.run({ subscriptions: ['site-pots'] });
run.onProgress((p) => console.log(p.phase, Math.round(p.overall * 100) + '%'));
const result = await run.completion;
if (!result.isSuccess) console.error(result.error?.code, result.error?.message);
```

本地编辑是应用程序自身连接上的普通 SQL : 商店的触发器会捕捉它们, 接下来的运行会推 他们。 图标( E)`engine.executeCommand`),变化种子(`readChangeFeed`),拒绝,隔离和运行报告 在.NET上的工作([07-倾角引擎](https://npmcn.com/AiGuides/07-Client-Engine.md), (中文(简体) ), [08-克立特语Name](https://npmcn.com/AiGuides/08-Client-Sqlite.md)) (中文(简体) ).

## 林克丝

使用 Lynx 的背景线程 [`@g9tm/syncdata-lynx`](https://npmcn.com/package/%40g9tm/lynx/README.md)数字 : `useLynxBrotli()` 财务报告和审定财务报表 `createLynxSyncTransport({ url })` (MessagePack over the G9本土的WebSocket——发行Lynx Building没有他们的 g9Lynx Controls的本地SQLite驱动程序。 代码是ES2019 并且没有使用 API 背景 线程缺乏( 没有 BigInt, `TextEncoder`, (中文(简体) ), `URL`, (中文(简体) ), `btoa`, (中文(简体) ), `globalThis` —— 建造失败.

## 许可证

麻省理工学院. 布罗特利解码器 `brotli-js` 是谷歌(麻省理工学院): [第三次议会提名(md)](https://npmcn.com/package/%40g9tm/syncdata/THIRD-PARTY-NOTICES.md)。 。 。 .

## 常见问题

### @g9tm/syncdata 是什么？

用于Lynx,节点和浏览器的G9SyncData\.NET客户端的TypeScript双胞胎:同步引擎,G9RowBatch协议,SQLite客户端商店\(与\.NET商店相同\)和信号R传输\.

### 如何安装 @g9tm/syncdata？

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

### @g9tm/syncdata 支持 TypeScript 吗？

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

### @g9tm/syncdata 支持 ESM 还是 CommonJS？

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

### @g9tm/syncdata 需要什么版本的 Node\.js？

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

### @g9tm/syncdata 可以商用吗？

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

### @g9tm/syncdata 的下载量有多少？

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

### @g9tm/syncdata 还在维护吗？

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

