安装
核心依赖
安装 RxDB 核心包:
- npm
- Yarn
- pnpm
- Bun
npm install @aiao/rxdb @aiao/utils
yarn add @aiao/rxdb @aiao/utils
pnpm add @aiao/rxdb @aiao/utils
bun add @aiao/rxdb @aiao/utils
数据库适配器
SQLite 适配器(推荐)
轻量级,兼容性最好:
- npm
- Yarn
- pnpm
- Bun
npm install @aiao/rxdb-adapter-sqlite
yarn add @aiao/rxdb-adapter-sqlite
pnpm add @aiao/rxdb-adapter-sqlite
bun add @aiao/rxdb-adapter-sqlite
PGlite 适配器
功能强大,支持完整 PostgreSQL:
- npm
- Yarn
- pnpm
- Bun
npm install @aiao/rxdb-adapter-pglite @electric-sql/pglite
yarn add @aiao/rxdb-adapter-pglite @electric-sql/pglite
pnpm add @aiao/rxdb-adapter-pglite @electric-sql/pglite
bun add @aiao/rxdb-adapter-pglite @electric-sql/pglite
详细对比请查看 PGlite 适配器文档 和 SQLite 适配器文档。
框架集成(可选)
根据使用的框架选择对应的集成包:
- npm
- Yarn
- pnpm
- Bun
# React
npm install @aiao/rxdb-react
# Vue 3
npm install @aiao/rxdb-vue
# Angular
npm install @aiao/rxdb-angular
# React
yarn add @aiao/rxdb-react
# Vue 3
yarn add @aiao/rxdb-vue
# Angular
yarn add @aiao/rxdb-angular
# React
pnpm add @aiao/rxdb-react
# Vue 3
pnpm add @aiao/rxdb-vue
# Angular
pnpm add @aiao/rxdb-angular
# React
bun add @aiao/rxdb-react
# Vue 3
bun add @aiao/rxdb-vue
# Angular
bun add @aiao/rxdb-angular
开发工具(可选)
测试工具和示例实体:
- npm
- Yarn
- pnpm
- Bun
npm install @aiao/rxdb-test -D
yarn add @aiao/rxdb-test --dev
pnpm add @aiao/rxdb-test -D
bun add @aiao/rxdb-test --dev
快速初始化
使用 SQLite 适配器
创建一个最小可运行的 RxDB 实例:
import { RxDB, SyncType } from '@aiao/rxdb';
import { RxDBAdapterSqlite, SqliteOptions } from '@aiao/rxdb-adapter-sqlite';
import { checkOPFSAvailable } from '@aiao/utils';
// 1. 定义或导入实体模型
// 使用测试包中的实体
import { Todo } from '@aiao/rxdb-test/entities';
// 或者定义自己的实体:
// import { Entity, EntityBase, PropertyType } from '@aiao/rxdb';
//
// @Entity({
// name: 'Todo',
// properties: [
// { name: 'title', type: PropertyType.string, required: true },
// { name: 'completed', type: PropertyType.boolean, default: false },
// { name: 'createdAt', type: PropertyType.date }
// ]
// })
// export class Todo extends EntityBase {}
// 2. 创建 RxDB 实例
export async function createRxdb() {
const rxdb = new RxDB({
dbName: 'demo',
entities: [Todo],
sync: {
local: { adapter: 'sqlite' },
type: SyncType.None
}
});
// 3. 注册适配器(根据浏览器能力选择最优配置)
rxdb.adapter('sqlite', async db => {
let options: SqliteOptions;
const available = await checkOPFSAvailable();
if (available) {
// OPFS + Worker(最佳性能)
options = {
vfs: 'OPFSCoopSyncVFS',
worker: true,
workerInstance: new Worker(
new URL('./sqlite.worker', import.meta.url),
{ type: 'module', name: 'rxdb-worker' }
),
wasmPath: '/wa-sqlite/wa-sqlite.wasm'
};
} else {
// IDB + SharedWorker(最佳兼容性)
options = {
vfs: 'IDBBatchAtomicVFS',
sharedWorker: true,
sharedWorkerInstance: new SharedWorker(
new URL('./sqlite-shared.worker', import.meta.url),
{ type: 'module', name: 'rxdb-shared-worker' }
),
wasmPath: '/wa-sqlite/wa-sqlite-async.wasm'
};
}
return new RxDBAdapterSqlite(db, options);
});
// 4. 连接数据库(首次连接会自动创建系统表与实体表)
await rxdb.connect('sqlite').toPromise();
return rxdb;
}
使用 PGlite 适配器
import { RxDB, SyncType } from '@aiao/rxdb';
import { RxDBAdapterPGlite } from '@aiao/rxdb-adapter-pglite';
import { PGlite } from '@electric-sql/pglite';
import { Todo } from '@aiao/rxdb-test/entities';
export async function createRxdb() {
const rxdb = new RxDB({
dbName: 'demo',
entities: [Todo],
sync: {
local: { adapter: 'pglite' },
type: SyncType.None
}
});
// 注册 PGlite 适配器
rxdb.adapter('pglite', async db => {
const pg = await PGlite.create({
dataDir: `idb://rxdb-${db.dbName}`
});
return new RxDBAdapterPGlite(db, pg);
});
await rxdb.connect('pglite').toPromise();
return rxdb;
}
Worker 文件配置
SQLite Worker 文件
sqlite.worker.ts (用于 OPFS)
import { SqliteWorker } from '@aiao/rxdb-adapter-sqlite';
const worker = new SqliteWorker();
worker.listen();
sqlite-shared.worker.ts (用于 IDB)
import { SqliteSharedWorker } from '@aiao/rxdb-adapter-sqlite';
const worker = new SqliteSharedWorker();
worker.listen();
静态资源配置
WASM 文件
将 wa-sqlite WASM 文件放到项目的 public 目录:
public/
wa-sqlite/
wa-sqlite.wasm # 用于 OPFS
wa-sqlite-async.wasm # 用于 IDB
可以从 wa-sqlite releases 下载最新版本。
Vite 配置
// vite.config.ts
import { defineConfig } from 'vite';
export default defineConfig({
// 配置 Worker 支持
worker: {
format: 'es'
},
// 配置静态资源目录
publicDir: 'public',
// 如果使用 OPFS,需要配置 HTTP 头
server: {
headers: {
'Cross-Origin-Opener-Policy': 'same-origin',
'Cross-Origin-Embedder-Policy': 'require-corp'
}
},
// 优化配置
optimizeDeps: {
exclude: [
'@aiao/rxdb-adapter-sqlite',
'@aiao/rxdb-adapter-pglite'
]
}
});
注意事项
Worker 和 WASM 路径
- Worker 文件需要使用
new URL('./worker.ts', import.meta.url)语法 - WASM 路径需要对应
public目录中的实际路径 - 构建工具(Vite、Webpack 等)需要正确处理这些资源
HTTP 头配置
如果使用 OPFS 模式,需要配置以下 HTTP 响应头:
Cross-Origin-Opener-Policy: same-origin
Cross-Origin-Embedder-Policy: require-corp
否则会导致 SharedArrayBuffer 不可用。
浏览器支持
- 最低要求: Chrome 90+, Edge 90+, Safari 14+, Firefox 88+
- 推荐版本: Chrome 102+, Edge 102+, Safari 15.2+, Firefox 111+ (支持 OPFS)
下一步
安装完成后,你可以:
示例项目
参考演示项目了解完整配置:
apps/dev-rxdb-angular- Angular 示例apps/dev-rxdb-react- React 示例apps/dev-rxdb-vue- Vue 示例