# @bjnstnkvc/db 中文文档

规范地址：https://npmcn.com/package/%40bjnstnkvc/db/

版本：21\.0\.1
npm 元数据更新时间：2026-10-25T21:06:13.793Z
中文译文更新时间：2026-11-08T05:22:26.373Z
软件包许可：MIT

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

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

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

- 包体积（解压后）：565 kB，7 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：0 个
- 首次发布：2026-09-15T16:06:26.814Z
- 最新版本发布：2026-10-25T21:06:13.402Z
- 近 30 天下载量：6683（2026-10-08 至 2026-11-06，npm 官方下载统计）
- 已发布版本数：85（近 12 个月 85 个）

## 中文简介

用于索引DB的TypeScript数据库层,其API模型在Laravel上.

## 安装

```sh
npm install @bjnstnkvc/db
```

也可以使用：`pnpm add @bjnstnkvc/db`、`yarn add @bjnstnkvc/db`、`bun add @bjnstnkvc/db`

## README

# 数据库

IndexedDB 的数据库层, 上面有 API 模型 [拉威尔的](https://laravel.com/docs/12.x/database)(单位:千美元) `DB` 类,一个流利的查询构建器,一个在您的应用靴子时运行的图案构建器和前向迁移.

方法名称及其语义学跟随Laravel 足够接近于 Docs 值得同时阅读 [文档](https://npmcn.com/package/%40bjnstnkvc/db/docs/README.md) 链接每个 Laravel 页面。 它不是一个端口:索引DB是一个没有查询语言的密钥值商店,所以行为必须不同的地方会在出现的地方被调出. 这个项目与拉拉维尔项目无关.

## 目录

-   [安装](https://npmcn.com/package/%40bjnstnkvc/db/#readme-installation)
-   [快开始](https://npmcn.com/package/%40bjnstnkvc/db/#readme-quick-start)
-   [文档](https://npmcn.com/package/%40bjnstnkvc/db/#readme-documentation)
-   [和拉拉维尔不同的地方](https://npmcn.com/package/%40bjnstnkvc/db/#readme-where-it-differs-from-laravel)
-   [测试](https://npmcn.com/package/%40bjnstnkvc/db/#readme-testing)

## 安装

您可以通过 npm 安装软件包 :

```bash
npm install @bjnstnkvc/db
```

然后导入到您的工程中

```ts
import { DB, Schema, Migration, type Blueprint } from '@bjnstnkvc/db';
```

该套件支持Chrome 93,Edge 93,Firefox 92和Safari 15.4或更后.

## 快开始

在模块范围上声明您的连接, 然后当应用靴子时迁移 :

```ts
import { DB, Schema, Migration, type Blueprint, type Transaction } from '@bjnstnkvc/db';

interface User {
    id: number;
    name: string;
    email: string;
    age: number | null;
    role: string;
    created_at: Date | null;
    updated_at: Date | null;
}

class CreateUsersTable extends Migration {
    /**
     * Run the migration.
     */
    override async up(): Promise<void> {
        await Schema.create('users', (table: Blueprint): void => {
            table.id();
            table.string('name');
            table.string('email').unique();
            table.integer('age').nullable().index();
            table.string('role').default('member').index();
            table.timestamps();
        });
    }
}

DB.configure({
    default    : 'app',
    connections: {
        app: {
            database  : 'app',
            migrations: [CreateUsersTable],
        },
    },
});

await DB.migrate('app');
```

`DB.migrate(name)` 是一能的,所以调用它 在每个靴子是预定的用途。 然后查询 :

```ts
await DB.table<User>('users').insert({ name: 'John', email: 'john@example.com', age: 30 });

const users: User[] = await DB.table<User>('users')
    .where('age', '>=', 18)
    .whereIn('role', ['admin', 'owner'])
    .orderBy('created_at', 'desc')
    .limit(10)
    .get();

await DB.transaction(async (transaction: Transaction): Promise<void> => {
    const id: IDBValidKey = await transaction.table<User>('users').insertGetId({ name: 'Jane', email: 'jane@example.com' });

    await transaction.table('posts').insert({ user_id: id, title: 'Hello' });
});
```

## 文档

-   [配置](https://npmcn.com/package/%40bjnstnkvc/db/docs/configuration.md): 宣布连接, 迁移在后头, 并解决, 断开和清理连接
-   [移徙](https://npmcn.com/package/%40bjnstnkvc/db/docs/migrations.md): 仅前向移徙,移徙可能等待什么 移民状况
-   [种子](https://npmcn.com/package/%40bjnstnkvc/db/docs/seeding.md):种子者,他们所写的连接,安全运行在每一个 从头开始重建
-   [定义方案](https://npmcn.com/package/%40bjnstnkvc/db/docs/schema.md): 列类型和修改器,修改和更改列, 重命名和降下列、 降下或重命名同一回调列的索引 声明、 小数、 enums、 已存储的强制行和保留表
-   [查询](https://npmcn.com/package/%40bjnstnkvc/db/docs/querying.md):限制,JSON列,塑造,终端和写作
-   [联合](https://npmcn.com/package/%40bjnstnkvc/db/docs/joins.md)内部,左,右和交叉 加入,以及它们的成本
-   [分组](https://npmcn.com/package/%40bjnstnkvc/db/docs/grouping.md)数字 : `groupBy`键入总量和 `having`
-   [查询计划](https://npmcn.com/package/%40bjnstnkvc/db/docs/query-plans.md):限制如何成为一个指数范围,以及 `explain()`
-   [交易](https://npmcn.com/package/%40bjnstnkvc/db/docs/transactions.md):交易范围、巢穴和召回可能等待的内容
-   [活动](https://npmcn.com/package/%40bjnstnkvc/db/docs/events.md):倾听查询、交易、迁移和种子活动,以及 查询日志
-   [多个标签](https://npmcn.com/package/%40bjnstnkvc/db/docs/multiple-tabs.md): 被屏蔽的升级和数据库被另一个标签所更改
-   [储存配额](https://npmcn.com/package/%40bjnstnkvc/db/docs/storage.md): 配额错误、使用估计和要求不被驱逐
-   [例外](https://npmcn.com/package/%40bjnstnkvc/db/docs/exceptions.md): 包投出的每一个例外,以及何时

## 和拉拉维尔不同的地方

-   **移徙只是向前发展.** 索引DB版本不能减少, 因此没有 `down()` 没有 `rollback()`,迁移只能附加. `DB.fresh(name)` 重新开始. 见 [移徙](https://npmcn.com/package/%40bjnstnkvc/db/docs/migrations.md)。 。 。 .
-   **迁移或交易只能等待此套件.** IndexedDB 执行交易 {\\fn华文楷体\\fs16\\1che0e0e0}所以等待着 {\\fn华文楷体\\fs16\\1che0e0e0}我需要你帮助 `fetch` 或计时器提前结束, 下一个调用 `MigrationTransactionClosedException` 或者说 `TransactionClosedException`。网络数据属于 [渗出物](https://npmcn.com/package/%40bjnstnkvc/db/docs/seeding.md)。见 [移民可能会等待什么](https://npmcn.com/package/%40bjnstnkvc/db/docs/migrations.md#what-a-migration-may-await) 财务报告和审定财务报表 [召回会等什么](https://npmcn.com/package/%40bjnstnkvc/db/docs/transactions.md#what-the-callback-may-await)。 。 。 .
-   **Schema 更改只在迁移内运行**,因为他们需要更改版本的交易. 读之方能随所出. 见 [移民外的Schema](https://npmcn.com/package/%40bjnstnkvc/db/docs/schema.md#schema-outside-a-migration)。 。 。 .
-   **列类型由此软件包在写时执行**,因为 IndexedDB 全部存储 对象和检查本身。 见 [定义方案](https://npmcn.com/package/%40bjnstnkvc/db/docs/schema.md)。 。 。 .
-   **没有 `beginTransaction()`, (中文(简体) ), `commit()` 或者说 `rollBack()`**,在 另一个连接上的运行会加入它,因为索引数据库没有保存点。 见 [交易](https://npmcn.com/package/%40bjnstnkvc/db/docs/transactions.md)。 。 。 .
-   **在内存中加入和分组运行**,仅通过连接到达基准表,并 集合在打入的对象中命名,而不是原始的SQL. 见 [联合](https://npmcn.com/package/%40bjnstnkvc/db/docs/joins.md) 财务报告和审定财务报表 [分组](https://npmcn.com/package/%40bjnstnkvc/db/docs/grouping.md)。 。 。 .
-   **查询最多使用一个索引.** `explain()` 显示哪个。 见 [查询计划](https://npmcn.com/package/%40bjnstnkvc/db/docs/query-plans.md)。 。 。 .
-   **浏览器添加自己的失败模式**: 储存配额、驱逐和持有 数据库打开。 见 [储存配额](https://npmcn.com/package/%40bjnstnkvc/db/docs/storage.md) 财务报告和审定财务报表 [多个标签](https://npmcn.com/package/%40bjnstnkvc/db/docs/multiple-tabs.md)。 。 。 .

## 测试

IndexedDB在节点不存在,所以将测试设置指向 [`fake-indexeddb`](https://www.npmjs.com/package/fake-indexeddb)数字 :

单位 `tests/setup.ts`数字 :

```ts
import 'fake-indexeddb/auto';
```

进 `vitest.config.ts`数字 :

```ts
export default defineConfig({
    test: {
        setupFiles: ['./tests/setup.ts'],
    },
});
```

给每个测试文件自己的数据库名称,这样套件就不会共享状态.

## 常见问题

### @bjnstnkvc/db 是什么？

用于索引DB的TypeScript数据库层,其API模型在Laravel上\.

### 如何安装 @bjnstnkvc/db？

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

### @bjnstnkvc/db 支持 TypeScript 吗？

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

### @bjnstnkvc/db 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @bjnstnkvc/db 可以商用吗？

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

### @bjnstnkvc/db 的下载量有多少？

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

### @bjnstnkvc/db 还在维护吗？

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

