Dexie.js

Dexie.js

强大易用的IndexedDB包装库 简化浏览器数据库操作

Dexie.js是一个广受欢迎的IndexedDB包装库,提供简洁的API接口来操作浏览器数据库。该库兼容主流浏览器、Electron和Capacitor应用,并修复了部分IndexedDB实现中的问题。Dexie.js性能优异,支持批量处理和多样化查询。通过与Dexie Cloud集成,可实现数据同步功能。从基础Web应用到复杂React项目,Dexie.js均能显著简化数据库操作流程,提升开发效率。

Dexie.jsIndexedDB浏览器数据库JavaScript库Web开发Github开源项目

Dexie.js

[![NPM 版本][npm-image]][npm-url] 构建状态

Dexie.js 是一个 indexedDB 的封装库 - indexedDB 是浏览器中的标准数据库。https://dexie.org。

为什么选择 Dexie.js?

IndexedDB 是所有浏览器引擎的通用数据库。Dexie.js 让使用它变得有趣且简单。

此外:

  • Dexie.js 被广泛用于 10 万个网站、应用程序和其他项目,支持所有浏览器、用于桌面应用的 Electron、用于 iOS / Android 应用的 Capacitor,当然还有纯 PWA。
  • Dexie.js 解决了 IndexedDB 实现中的一些 bug,提供更稳定的用户体验。
  • 它可以轻松实现同步

Hello World

<!DOCTYPE html> <html> <head> <script src="https://unpkg.com/dexie/dist/dexie.js"></script> <script> // // 声明数据库 // const db = new Dexie('FriendDatabase'); db.version(1).stores({ friends: '++id, age' }); // // 使用示例 // db.friends.add({ name: 'Alice', age: 21 }).then(() => { return db.friends .where('age') .below(30) .toArray(); }).then(youngFriends => { alert (`我的年轻朋友:${JSON.stringify(youngFriends)}`); }).catch (e => { alert(`出错了:${e}`); }); </script> </head> </html>

是的,就是这么简单。阅读文档以了解详情。

Hello World(适用于现代浏览器)

所有现代浏览器都支持 ES 模块和顶级 await。无需转译器。以下是上一个示例的现代版本:

<!DOCTYPE html> <html> <head> <script type="module"> // 导入 Dexie import { Dexie } from 'https://unpkg.com/dexie/dist/modern/dexie.mjs'; // // 声明数据库 // const db = new Dexie('FriendDatabase'); db.version(1).stores({ friends: '++id, age' }); // // 使用示例 // try { await db.friends.add({ name: 'Alice', age: 21 }); const youngFriends = await db.friends .where('age') .below(30) .toArray(); alert(`我的年轻朋友:${JSON.stringify(youngFriends)}`); } catch (e) { alert(`出错了:${e}`); } </script> </head> </html>

Hello World(React + TypeScript)

实际应用通常使用各种框架中的组件构建。以下是为 React 和 TypeScript 编写的 Hello World 版本。在此示例下方还有更多不同框架的教程链接...

import React from 'react'; import { Dexie, type EntityTable } from 'dexie'; import { useLiveQuery } from 'dexie-react-hooks'; // 实体类型定义(建议移到单独的模块中) export interface Friend { id: number; name: string; age: number; } // 数据库声明(也建议移到单独的模块中) export const db = new Dexie('FriendDatabase') as Dexie & { friends: EntityTable<Friend, 'id'>; }; db.version(1).stores({ friends: '++id, age', }); // 组件: export function MyDexieReactComponent() { const youngFriends = useLiveQuery(() => db.friends .where('age') .below(30) .toArray() ); return ( <> <h3>我的年轻朋友</h3> <ul> {youngFriends?.map((f) => ( <li key={f.id}> 姓名:{f.name},年龄:{f.age} </li> ))} </ul> <button onClick={() => { db.friends.add({ name: 'Alice', age: 21 }); }} > 添加另一个朋友 </button> </> ); }

React、Svelte、Vue、Angular 和原生 JS 的教程

API 参考 示例

性能

Dexie拥有出色的性能。它的批量方法利用了IndexedDB中一个鲜为人知的特性,使得在存储数据时无需监听每个onsuccess事件。这将性能提升到最大。

支持的操作

above(key): Collection; aboveOrEqual(key): Collection; add(item, key?): Promise; and(filter: (x) => boolean): Collection; anyOf(keys[]): Collection; anyOfIgnoreCase(keys: string[]): Collection; below(key): Collection; belowOrEqual(key): Collection; between(lower, upper, includeLower?, includeUpper?): Collection; bulkAdd(items: Array): Promise; bulkDelete(keys: Array): Promise; bulkPut(items: Array): Promise; clear(): Promise; count(): Promise; delete(key): Promise; distinct(): Collection; each(callback: (obj) => any): Promise; eachKey(callback: (key) => any): Promise; eachPrimaryKey(callback: (key) => any): Promise; eachUniqueKey(callback: (key) => any): Promise; equals(key): Collection; equalsIgnoreCase(key): Collection; filter(fn: (obj) => boolean): Collection; first(): Promise; get(key): Promise; inAnyRange(ranges): Collection; keys(): Promise; last(): Promise; limit(n: number): Collection; modify(changeCallback: (obj: T, ctx:{value: T}) => void): Promise; modify(changes: { [keyPath: string]: any } ): Promise; noneOf(keys: Array): Collection; notEqual(key): Collection; offset(n: number): Collection; or(indexOrPrimayKey: string): WhereClause; orderBy(index: string): Collection; primaryKeys(): Promise; put(item: T, key?: Key): Promise; reverse(): Collection; sortBy(keyPath: string): Promise; startsWith(key: string): Collection; startsWithAnyOf(prefixes: string[]): Collection; startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; startsWithIgnoreCase(key: string): Collection; toArray(): Promise; toCollection(): Collection; uniqueKeys(): Promise; until(filter: (value) => boolean, includeStopEntry?: boolean): Collection; update(key: Key, changes: { [keyPath: string]: any }): Promise;

这是WhereClauseTableCollection方法的混合。深入API参考以查看详细信息。

Dexie Cloud

Dexie Cloud是一个商业产品,可以作为Dexie.js的附加组件使用。它可以将Dexie数据库与服务器同步,使开发者能够构建应用程序,而无需关心后端或数据库层,只需专注于使用Dexie.js作为唯一数据库层的前端代码。

Dexie Cloud应用示例源代码:Dexie Cloud待办事项应用

查看Dexie Cloud示例应用运行效果:https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/

示例

https://dexie.org/docs/Samples

https://github.com/dexie/Dexie.js/tree/master/samples

知识库

https://dexie.org/docs/Questions-and-Answers

网站

https://dexie.org

通过npm安装

npm install dexie

下载

对于不喜欢包管理器的人,这里是下载链接:

UMD(用于传统脚本引入以及commonjs require):

https://unpkg.com/dexie@latest/dist/dexie.min.js

https://unpkg.com/dexie@latest/dist/dexie.min.js.map

现代版(ES模块):

https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs

https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs.map

类型定义:

https://unpkg.com/dexie@latest/dist/dexie.d.ts

贡献

请查看CONTRIBUTING.md

构建

pnpm install
pnpm run build

测试

pnpm test

监视

pnpm run watch

通过LAMDBATEST进行浏览器测试

编辑推荐精选

扣子-AI办公

扣子-AI办公

职场AI,就用扣子

AI办公助手,复杂任务高效处理。办公效率低?扣子空间AI助手支持播客生成、PPT制作、网页开发及报告写作,覆盖科研、商业、舆情等领域的专家Agent 7x24小时响应,生活工作无缝切换,提升50%效率!

堆友

堆友

多风格AI绘画神器

堆友平台由阿里巴巴设计团队创建,作为一款AI驱动的设计工具,专为设计师提供一站式增长服务。功能覆盖海量3D素材、AI绘画、实时渲染以及专业抠图,显著提升设计品质和效率。平台不仅提供工具,还是一个促进创意交流和个人发展的空间,界面友好,适合所有级别的设计师和创意工作者。

图像生成AI工具AI反应堆AI工具箱AI绘画GOAI艺术字堆友相机AI图像热门
码上飞

码上飞

零代码AI应用开发平台

零代码AI应用开发平台,用户只需一句话简单描述需求,AI能自动生成小程序、APP或H5网页应用,无需编写代码。

Vora

Vora

免费创建高清无水印Sora视频

Vora是一个免费创建高清无水印Sora视频的AI工具

Refly.AI

Refly.AI

最适合小白的AI自动化工作流平台

无需编码,轻松生成可复用、可变现的AI自动化工作流

酷表ChatExcel

酷表ChatExcel

大模型驱动的Excel数据处理工具

基于大模型交互的表格处理系统,允许用户通过对话方式完成数据整理和可视化分析。系统采用机器学习算法解析用户指令,自动执行排序、公式计算和数据透视等操作,支持多种文件格式导入导出。数据处理响应速度保持在0.8秒以内,支持超过100万行数据的即时分析。

AI工具酷表ChatExcelAI智能客服AI营销产品使用教程
TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
AIWritePaper论文写作

AIWritePaper论文写作

AI论文写作指导平台

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

AI辅助写作AI工具AI论文工具论文写作智能生成大纲数据安全AI助手热门
博思AIPPT

博思AIPPT

AI一键生成PPT,就用博思AIPPT!

博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。

AI办公办公工具AI工具博思AIPPTAI生成PPT智能排版海量精品模板AI创作热门
潮际好麦

潮际好麦

AI赋能电商视觉革命,一站式智能商拍平台

潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。

下拉加载更多