taro-bluetooth-print 2.10.0 → 2.10.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +81 -359
- package/README.md +237 -122
- package/dist/index.cjs.js +1 -1
- package/dist/index.es.js +1 -1
- package/dist/index.umd.js +1 -1
- package/dist/types/adapters/BaseAdapter.d.ts +11 -5
- package/dist/types/adapters/ChunkWriteStrategy.d.ts +99 -0
- package/dist/types/adapters/ReactNativeAdapter.d.ts +1 -0
- package/dist/types/adapters/WebBluetoothAdapter.d.ts +5 -0
- package/dist/types/cache/OfflineCache.d.ts +8 -34
- package/dist/types/core/BluetoothPrinter.d.ts +11 -1
- package/dist/types/core/di/Container.d.ts +84 -0
- package/dist/types/core/di/Tokens.d.ts +29 -0
- package/dist/types/core/di/index.d.ts +3 -0
- package/dist/types/core/event/EventBus.d.ts +66 -0
- package/dist/types/core/event/index.d.ts +2 -0
- package/dist/types/core/index.d.ts +5 -4
- package/dist/types/core/plugin/PluginManager.d.ts +64 -0
- package/dist/types/core/plugin/index.d.ts +2 -0
- package/dist/types/device/DeviceManager.d.ts +10 -35
- package/dist/types/device/DiscoveryService.d.ts +0 -8
- package/dist/types/device/MultiPrinterManager.d.ts +15 -22
- package/dist/types/drivers/CpclDriver.d.ts +9 -4
- package/dist/types/drivers/GPrinterDriver.d.ts +1 -36
- package/dist/types/drivers/SprtDriver.d.ts +1 -42
- package/dist/types/drivers/XprinterDriver.d.ts +1 -37
- package/dist/types/drivers/ZplDriver.d.ts +9 -9
- package/dist/types/drivers/{EscPos.d.ts → escPosDriver.d.ts} +55 -0
- package/dist/types/drivers/index.d.ts +1 -1
- package/dist/types/errors/CommandBuildError.d.ts +1 -1
- package/dist/types/errors/ConnectionError.d.ts +1 -1
- package/dist/types/errors/PrintJobError.d.ts +1 -1
- package/dist/types/errors/index.d.ts +1 -1
- package/dist/types/factory/di-factory.d.ts +52 -0
- package/dist/types/index.d.ts +6 -2
- package/dist/types/plugins/PluginManager.d.ts +1 -1
- package/dist/types/plugins/builtin/RetryPlugin.d.ts +1 -1
- package/dist/types/plugins/types.d.ts +1 -1
- package/dist/types/providers/ServiceProvider.d.ts +56 -0
- package/dist/types/providers/index.d.ts +2 -0
- package/dist/types/queue/PrintQueue.d.ts +10 -34
- package/dist/types/services/BatchPrintManager.d.ts +18 -53
- package/dist/types/services/ConnectionManager.d.ts +1 -1
- package/dist/types/services/PrintScheduler.d.ts +2 -2
- package/dist/types/services/ScheduledRetryManager.d.ts +8 -27
- package/dist/types/services/interfaces/IConnectionManager.d.ts +5 -0
- package/dist/types/types.d.ts +5 -0
- package/dist/types/utils/encoding.d.ts +2 -1
- package/dist/types/utils/index.d.ts +9 -0
- package/dist/types/utils/logger.d.ts +4 -3
- package/dist/types/utils/normalizeError.d.ts +50 -0
- package/dist/types/utils/outputLimiter.d.ts +87 -0
- package/dist/types/utils/uuid.d.ts +1 -97
- package/dist/types/utils/validation.d.ts +4 -20
- package/dist/types/utils/withTimeout.d.ts +28 -0
- package/package.json +12 -2
- package/src/adapters/AdapterFactory.ts +1 -1
- package/src/adapters/BaseAdapter.ts +112 -151
- package/src/adapters/ChunkWriteStrategy.ts +248 -0
- package/src/adapters/ReactNativeAdapter.ts +97 -144
- package/src/adapters/WebBluetoothAdapter.ts +58 -13
- package/src/cache/OfflineCache.ts +10 -63
- package/src/config/PrinterConfigManager.ts +1 -0
- package/src/core/BluetoothPrinter.ts +50 -24
- package/src/core/EventEmitter.ts +4 -1
- package/src/core/di/Container.ts +332 -0
- package/src/core/di/Tokens.ts +45 -0
- package/src/core/di/index.ts +3 -0
- package/src/core/event/EventBus.ts +254 -0
- package/src/core/event/index.ts +2 -0
- package/src/core/index.ts +10 -4
- package/src/core/plugin/PluginManager.ts +161 -0
- package/src/core/plugin/index.ts +2 -0
- package/src/device/DeviceManager.ts +8 -58
- package/src/device/DiscoveryService.ts +7 -46
- package/src/device/MultiPrinterManager.ts +12 -59
- package/src/drivers/CpclDriver.ts +34 -7
- package/src/drivers/GPrinterDriver.ts +1 -75
- package/src/drivers/SprtDriver.ts +1 -81
- package/src/drivers/XprinterDriver.ts +1 -64
- package/src/drivers/ZplDriver.ts +31 -12
- package/src/drivers/{EscPos.ts → escPosDriver.ts} +80 -0
- package/src/drivers/index.ts +1 -1
- package/src/errors/CommandBuildError.ts +1 -1
- package/src/errors/ConnectionError.ts +1 -1
- package/src/errors/PrintJobError.ts +1 -1
- package/src/errors/index.ts +1 -1
- package/src/factory/PrinterFactory.ts +10 -3
- package/src/factory/di-factory.ts +61 -0
- package/src/index.ts +51 -2
- package/src/plugins/PluginManager.ts +1 -1
- package/src/plugins/builtin/RetryPlugin.ts +1 -1
- package/src/plugins/types.ts +1 -1
- package/src/providers/ServiceProvider.ts +213 -0
- package/src/providers/index.ts +2 -0
- package/src/queue/PrintQueue.ts +22 -53
- package/src/services/BatchPrintManager.ts +17 -64
- package/src/services/CloudPrintManager.ts +3 -3
- package/src/services/CommandBuilder.ts +1 -1
- package/src/services/ConnectionManager.ts +39 -41
- package/src/services/PrintHistory.ts +4 -2
- package/src/services/PrintJobManager.ts +13 -4
- package/src/services/PrintScheduler.ts +27 -24
- package/src/services/PrintStatistics.ts +16 -10
- package/src/services/PrinterStatus.ts +3 -9
- package/src/services/QRCodeDiscoveryService.ts +20 -10
- package/src/services/ScheduledRetryManager.ts +8 -64
- package/src/services/interfaces/IConnectionManager.ts +6 -0
- package/src/template/engines/TemplateRenderer.ts +1 -1
- package/src/types.ts +6 -0
- package/src/utils/encoding.ts +2 -1
- package/src/utils/index.ts +10 -0
- package/src/utils/logger.ts +17 -4
- package/src/utils/normalizeError.ts +68 -0
- package/src/utils/outputLimiter.ts +234 -0
- package/src/utils/uuid.ts +4 -273
- package/src/utils/validation.ts +4 -32
- package/src/utils/withTimeout.ts +49 -0
- package/dist/types/utils/validators/array.d.ts +0 -19
- package/dist/types/utils/validators/buffer.d.ts +0 -18
- package/dist/types/utils/validators/chain.d.ts +0 -31
- package/dist/types/utils/validators/common.d.ts +0 -22
- package/dist/types/utils/validators/number.d.ts +0 -20
- package/dist/types/utils/validators/object.d.ts +0 -24
- package/dist/types/utils/validators/printer.d.ts +0 -40
- package/dist/types/utils/validators/types.d.ts +0 -125
- package/dist/types/utils/validators/uuid.d.ts +0 -23
- package/src/utils/validators/array.ts +0 -95
- package/src/utils/validators/buffer.ts +0 -81
- package/src/utils/validators/chain.ts +0 -181
- package/src/utils/validators/common.ts +0 -216
- package/src/utils/validators/number.ts +0 -101
- package/src/utils/validators/object.ts +0 -63
- package/src/utils/validators/printer.ts +0 -294
- package/src/utils/validators/types.ts +0 -105
- package/src/utils/validators/uuid.ts +0 -49
- /package/dist/types/errors/{BluetoothError.d.ts → baseError.d.ts} +0 -0
- /package/src/errors/{BluetoothError.ts → baseError.ts} +0 -0
package/README.md
CHANGED
|
@@ -1,92 +1,105 @@
|
|
|
1
|
-
|
|
1
|
+
<div align="center">
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
<a href="https://www.npmjs.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/npm/v/taro-bluetooth-print?style=flat-square&color=4338ca" alt="npm version"></a>
|
|
5
|
-
<a href="https://www.npmjs.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/npm/dm/taro-bluetooth-print?style=flat-square&color=4338ca" alt="downloads"></a>
|
|
6
|
-
<a href="https://github.com/agions/taro-bluetooth-print/blob/main/LICENSE" target="_blank"><img src="https://img.shields.io/npm/l/taro-bluetooth-print?style=flat-square&color=4338ca" alt="license"></a>
|
|
7
|
-
<a href="https://github.com/agions/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/github/stars/agions/taro-bluetooth-print?style=flat-square" alt="stars"></a>
|
|
8
|
-
<a href="https://github.com/agions/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/github/forks/agions/taro-bluetooth-print?style=flat-square" alt="forks"></a>
|
|
9
|
-
<a href="https://bundlephobia.com/package/taro-bluetooth-print" target="_blank"><img src="https://img.shields.io/bundlephobia/minzip/taro-bluetooth-print?style=flat-square" alt="bundle size"></a>
|
|
10
|
-
</p>
|
|
3
|
+
# 🖨️ Taro Bluetooth Print
|
|
11
4
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
5
|
+
**轻量级、高性能的 Taro 跨端蓝牙打印库 — 覆盖 7 大平台、8 种打印协议,开箱即用**
|
|
6
|
+
|
|
7
|
+
[](https://www.npmjs.com/package/taro-bluetooth-print)
|
|
8
|
+
[](https://www.npmjs.com/package/taro-bluetooth-print)
|
|
9
|
+
[](https://github.com/agions/taro-bluetooth-print/blob/main/LICENSE)
|
|
10
|
+
[](https://github.com/agions/taro-bluetooth-print)
|
|
11
|
+
[](https://github.com/agions/taro-bluetooth-print)
|
|
12
|
+
[](https://bundlephobia.com/package/taro-bluetooth-print)
|
|
13
|
+
|
|
14
|
+
</div>
|
|
15
15
|
|
|
16
16
|
---
|
|
17
17
|
|
|
18
|
-
##
|
|
18
|
+
## ✨ 特性总览
|
|
19
19
|
|
|
20
|
-
### 基础能力
|
|
20
|
+
### 📡 基础能力
|
|
21
21
|
|
|
22
22
|
| 能力 | 说明 |
|
|
23
|
-
|
|
24
|
-
| 多平台适配 |
|
|
25
|
-
| 多协议驱动 | ESC/POS(热敏)、TSPL/ZPL/CPCL(标签)、STAR
|
|
26
|
-
| 链式调用 | `printer.text(...).feed().qr(...).cut().print()
|
|
27
|
-
| TypeScript |
|
|
28
|
-
|
|
|
23
|
+
|:-----|:-----|
|
|
24
|
+
| 多平台适配 | 微信 / 支付宝 / 百度 / 字节跳动 / QQ 小程序,H5 WebBluetooth,React Native |
|
|
25
|
+
| 多协议驱动 | ESC/POS(热敏)、TSPL / ZPL / CPCL(标签)、STAR / 佳博 / 芯烨 / 思普瑞特 |
|
|
26
|
+
| 链式调用 API | `printer.text(...).feed().qr(...).cut().print()` — IDE 全自动补全 |
|
|
27
|
+
| TypeScript 严格模式 | 完整类型定义,零 `any` 暴露,无外部运行时依赖 |
|
|
28
|
+
| 多编码支持 | GBK / GB2312 / Big5 / UTF-8 / EUC-KR / Shift-JIS / ISO-2022-JP |
|
|
29
|
+
| 零运行时依赖 | 生产包无第三方运行时依赖,体积可控 |
|
|
29
30
|
|
|
30
|
-
### 高级打印
|
|
31
|
+
### 🖨️ 高级打印
|
|
31
32
|
|
|
32
33
|
| 能力 | 说明 |
|
|
33
|
-
|
|
34
|
-
| 图片打印 | Floyd-Steinberg 抖动算法,6 种抖动模式,RGBA →
|
|
35
|
-
|
|
|
36
|
-
|
|
|
37
|
-
|
|
|
34
|
+
|:-----|:-----|
|
|
35
|
+
| 图片打印 | Floyd-Steinberg 抖动算法,6 种抖动模式,RGBA → 黑白位图自适应转换,ESC/POS/ZPL/TSPL/STAR 全驱动支持 |
|
|
36
|
+
| ZPL 图像编码 | `ZplDriver.image()` — ^GFA 命令,位图 → 十六进制编码,支持 ZD420 等 Zebra 标签机 |
|
|
37
|
+
| CPCL Logo 下载 | `CpclDriver.downloadLogo()` — CG 压缩图形命令,宏定义存储,支持 HP 等移动打印机 |
|
|
38
|
+
| 二维码 / 条码 | 原生指令支持 Code128 / EAN / UPC / QR / PDF417 等 10+ 格式 |
|
|
39
|
+
| 模板引擎 | 支持 `loop` 循环 / `condition` 条件 / `border` 边框 / `table` 表格,小票标签一键渲染 |
|
|
40
|
+
| 任务生命周期 | 完整的打印任务暂停 / 恢复 / 取消控制 |
|
|
38
41
|
| 打印预览 | ESC/POS 命令实时渲染为 Canvas 图像,调试所见即所得 |
|
|
39
42
|
|
|
40
|
-
### 运维管理
|
|
43
|
+
### ⚙️ 运维管理
|
|
41
44
|
|
|
42
45
|
| 能力 | 说明 |
|
|
43
|
-
|
|
44
|
-
| 离线缓存 |
|
|
45
|
-
| 打印队列 |
|
|
46
|
-
| 多打印机管理 | MultiPrinterManager 多设备并发,支持负载均衡 |
|
|
47
|
-
| 打印历史 | PrintHistory
|
|
48
|
-
| 定时重试 | ScheduledRetryManager
|
|
49
|
-
| 定时调度 | PrintScheduler 支持 cron
|
|
50
|
-
| 设备发现 | DiscoveryService 增强型过滤、排序、RSSI
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## 性能指标
|
|
55
|
-
|
|
56
|
-
| 指标 | 值 |
|
|
57
|
-
|------|-----|
|
|
58
|
-
| 包体积(gzip) | **~226 KB**(含全部驱动,无外部依赖) |
|
|
59
|
-
| Tree-shaking | ✅ 支持,import { BluetoothPrinter } 即用 |
|
|
60
|
-
| 按需加载 | ✅ 编码表懒加载,未用到的字符集不进入产物 |
|
|
61
|
-
| 测试覆盖 | ✅ 648 个用例,CI 全链路通过 |
|
|
46
|
+
|:-----|:-----|
|
|
47
|
+
| 离线缓存 | 断网自动缓存,恢复网络自动同步,零任务丢失 |
|
|
48
|
+
| 打印队列 | 优先级排序、失败自动重试、死链自动剔除 |
|
|
49
|
+
| 多打印机管理 | `MultiPrinterManager` 多设备并发,支持负载均衡 |
|
|
50
|
+
| 打印历史 | `PrintHistory` 完整记录,含耗时 / 字节数 / 成功率统计 |
|
|
51
|
+
| 定时重试 | `ScheduledRetryManager` 指数退避策略,进程重启后自动恢复调度 |
|
|
52
|
+
| 定时调度 | `PrintScheduler` 支持 cron 表达式 / 一次性 / 间隔重复任务 |
|
|
53
|
+
| 设备发现 | `DiscoveryService` 增强型过滤、排序、RSSI 信号缓存 |
|
|
54
|
+
| 插件系统 | DI 容器 + EventBus 事件总线,可扩展架构 |
|
|
62
55
|
|
|
63
56
|
---
|
|
64
57
|
|
|
65
|
-
##
|
|
58
|
+
## 📦 安装
|
|
66
59
|
|
|
67
60
|
```bash
|
|
61
|
+
# npm
|
|
62
|
+
npm install taro-bluetooth-print
|
|
63
|
+
|
|
64
|
+
# pnpm(推荐)
|
|
68
65
|
pnpm add taro-bluetooth-print
|
|
66
|
+
|
|
67
|
+
# yarn
|
|
68
|
+
yarn add taro-bluetooth-print
|
|
69
69
|
```
|
|
70
70
|
|
|
71
|
-
|
|
72
|
-
|
|
71
|
+
> **前置依赖**:项目需安装 `@tarojs/taro ^3.6.22` 及以上版本。
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 🚀 快速开始
|
|
73
76
|
|
|
74
|
-
|
|
75
|
-
|
|
77
|
+
```typescript
|
|
78
|
+
import {
|
|
79
|
+
createBluetoothPrinter,
|
|
80
|
+
DeviceManager,
|
|
81
|
+
WebBluetoothAdapter
|
|
82
|
+
} from 'taro-bluetooth-print';
|
|
83
|
+
|
|
84
|
+
async function printReceipt() {
|
|
85
|
+
// ① 扫描蓝牙设备
|
|
76
86
|
const manager = new DeviceManager();
|
|
77
87
|
await manager.startScan({ timeout: 10000 });
|
|
78
88
|
const devices = manager.getDiscoveredDevices();
|
|
79
89
|
|
|
80
90
|
if (devices.length === 0) {
|
|
81
|
-
console.
|
|
91
|
+
console.warn('未发现蓝牙设备');
|
|
82
92
|
return;
|
|
83
93
|
}
|
|
84
94
|
|
|
85
|
-
//
|
|
86
|
-
const printer =
|
|
95
|
+
// ② 创建打印机实例并连接
|
|
96
|
+
const printer = createBluetoothPrinter({
|
|
97
|
+
adapter: new WebBluetoothAdapter()
|
|
98
|
+
});
|
|
99
|
+
|
|
87
100
|
await printer.connect(devices[0].deviceId);
|
|
88
101
|
|
|
89
|
-
//
|
|
102
|
+
// ③ 链式调用 — 构建并打印小票
|
|
90
103
|
await printer
|
|
91
104
|
.text('=== 欢迎光临 ===', 'GBK')
|
|
92
105
|
.feed()
|
|
@@ -101,135 +114,237 @@ async function print() {
|
|
|
101
114
|
.cut()
|
|
102
115
|
.print();
|
|
103
116
|
|
|
117
|
+
// ④ 断开连接
|
|
104
118
|
await printer.disconnect();
|
|
105
119
|
}
|
|
106
120
|
```
|
|
107
121
|
|
|
108
122
|
---
|
|
109
123
|
|
|
110
|
-
##
|
|
124
|
+
## 📱 平台支持
|
|
111
125
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
| 平台 | 适配器 | 状态 |
|
|
115
|
-
|------|--------|------|
|
|
126
|
+
| 平台 | 适配器类 | 状态 |
|
|
127
|
+
|:-----|:---------|:----:|
|
|
116
128
|
| 微信小程序 | `TaroAdapter` | ✅ |
|
|
117
|
-
| H5 (Web Bluetooth) | `WebBluetoothAdapter` | ✅ |
|
|
118
129
|
| 支付宝小程序 | `AlipayAdapter` | ✅ |
|
|
119
130
|
| 百度小程序 | `BaiduAdapter` | ✅ |
|
|
120
131
|
| 字节跳动小程序 | `ByteDanceAdapter` | ✅ |
|
|
121
132
|
| QQ 小程序 | `QQAdapter` | ✅ |
|
|
122
|
-
|
|
|
133
|
+
| H5 (Web Bluetooth) | `WebBluetoothAdapter` | ✅ |
|
|
123
134
|
| React Native | `ReactNativeAdapter` | ✅ |
|
|
124
135
|
|
|
125
|
-
|
|
136
|
+
> 💡 **提示**:鸿蒙 HarmonyOS 可通过 `TaroAdapter` 适配使用。
|
|
137
|
+
|
|
138
|
+
## 🖨️ 打印机驱动
|
|
126
139
|
|
|
127
|
-
| 驱动 | 协议 | 典型品牌 |
|
|
128
|
-
|
|
129
|
-
| `EscPos` | ESC/POS | 佳博、芯烨、商米、汉印 |
|
|
130
|
-
| `TsplDriver` | TSPL | TSC ME240、TA210、TTP-244 |
|
|
131
|
-
| `ZplDriver` | ZPL | Zebra ZD420、GT800、ZM400 |
|
|
132
|
-
| `CpclDriver` | CPCL | HP IR3222
|
|
133
|
-
| `StarPrinter` | STAR | STAR TSP100、TSP700、TSP800 |
|
|
134
|
-
| `GPrinterDriver` |
|
|
135
|
-
| `XprinterDriver` | ESC/POS | 芯烨 XP-58 系列 |
|
|
136
|
-
| `SprtDriver` | ESC/POS | 思普瑞特系列 |
|
|
140
|
+
| 驱动 | 协议 | 典型品牌 / 型号 | 功能状态 |
|
|
141
|
+
|:-----|:-----|:---------------|:--------|
|
|
142
|
+
| `EscPos` | ESC/POS | 佳博、芯烨、商米、汉印 | ✅ 全功能 |
|
|
143
|
+
| `TsplDriver` | TSPL | TSC ME240、TA210、TTP-244 | ✅ 全功能 |
|
|
144
|
+
| `ZplDriver` | ZPL | Zebra ZD420、GT800、ZM400 | ✅ 含图像打印 (^GFA) |
|
|
145
|
+
| `CpclDriver` | CPCL | HP IR3222、霍尼韦尔移动打印机 | ✅ 含 Logo 下载 (CG) |
|
|
146
|
+
| `StarPrinter` | STAR | STAR TSP100、TSP700、TSP800 | ✅ 全功能 |
|
|
147
|
+
| `GPrinterDriver` | 佳博自定义 | 佳博 GP-5890X 系列 | ✅ 全功能 |
|
|
148
|
+
| `XprinterDriver` | ESC/POS | 芯烨 XP-58 系列 | ✅ 全功能 |
|
|
149
|
+
| `SprtDriver` | ESC/POS | 思普瑞特系列 | ✅ 全功能 |
|
|
137
150
|
|
|
138
151
|
---
|
|
139
152
|
|
|
140
|
-
## 配置与事件
|
|
153
|
+
## ⚙️ 配置与事件
|
|
154
|
+
|
|
155
|
+
### 传输参数配置
|
|
141
156
|
|
|
142
157
|
```typescript
|
|
143
|
-
const printer =
|
|
158
|
+
const printer = createBluetoothPrinter();
|
|
144
159
|
|
|
145
|
-
//
|
|
160
|
+
// 调整蓝牙传输参数(适配不同打印机的吞吐能力)
|
|
146
161
|
printer.setOptions({
|
|
147
|
-
chunkSize: 20,
|
|
148
|
-
delay: 20, //
|
|
149
|
-
retries: 3,
|
|
162
|
+
chunkSize: 20, // 单次写入分片大小(byte),默认 20
|
|
163
|
+
delay: 20, // 分片写入间隔(ms),默认 20
|
|
164
|
+
retries: 3, // 写入失败重试次数,默认 3
|
|
150
165
|
});
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 事件监听
|
|
151
169
|
|
|
152
|
-
|
|
170
|
+
```typescript
|
|
171
|
+
// 打印进度
|
|
153
172
|
printer.on('progress', ({ sent, total }) => {
|
|
154
|
-
console.log(
|
|
173
|
+
console.log(`打印进度: ${(sent / total * 100).toFixed(1)}%`);
|
|
155
174
|
});
|
|
156
175
|
|
|
176
|
+
// 错误事件
|
|
157
177
|
printer.on('error', (error) => {
|
|
158
|
-
console.error('
|
|
178
|
+
console.error('打印错误:', error.code, error.message);
|
|
159
179
|
});
|
|
160
180
|
|
|
181
|
+
// 打印完成
|
|
161
182
|
printer.on('print-complete', () => {
|
|
162
|
-
console.log('
|
|
183
|
+
console.log('✅ 打印任务完成');
|
|
163
184
|
});
|
|
164
185
|
```
|
|
165
186
|
|
|
166
187
|
---
|
|
167
188
|
|
|
168
|
-
##
|
|
189
|
+
## 🛡️ 错误处理
|
|
190
|
+
|
|
191
|
+
库提供完整的类型化错误层次结构,支持精确的错误捕获与处理:
|
|
192
|
+
|
|
193
|
+
```typescript
|
|
194
|
+
import {
|
|
195
|
+
BluetoothPrintError,
|
|
196
|
+
ConnectionError,
|
|
197
|
+
PrintJobError,
|
|
198
|
+
CommandBuildError,
|
|
199
|
+
ErrorCode
|
|
200
|
+
} from 'taro-bluetooth-print';
|
|
201
|
+
|
|
202
|
+
// 方式一:统一错误基类捕获
|
|
203
|
+
try {
|
|
204
|
+
await printer.print();
|
|
205
|
+
} catch (err) {
|
|
206
|
+
if (err instanceof BluetoothPrintError) {
|
|
207
|
+
console.error(`[${err.code}] ${err.message}`);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// 方式二:按错误类型精确处理(推荐)
|
|
212
|
+
try {
|
|
213
|
+
await printer.connect(deviceId);
|
|
214
|
+
} catch (err) {
|
|
215
|
+
if (ConnectionError.isConnectionError(err)) {
|
|
216
|
+
// 连接失败 — 可提示用户重试
|
|
217
|
+
console.warn('连接错误:', err.message);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
try {
|
|
222
|
+
// ... 打印操作
|
|
223
|
+
} catch (err) {
|
|
224
|
+
if (PrintJobError.isPrintJobError(err)) {
|
|
225
|
+
// 打印任务失败 — 可重新加入队列
|
|
226
|
+
console.warn('任务错误:', err.message);
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
try {
|
|
231
|
+
printer.text('测试', 'UNSUPPORTED_ENCODING');
|
|
232
|
+
} catch (err) {
|
|
233
|
+
if (CommandBuildError.isCommandBuildError(err)) {
|
|
234
|
+
// 指令构建失败 — 参数校验问题
|
|
235
|
+
console.warn('指令错误:', err.message);
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## 🏗️ 架构概览
|
|
169
243
|
|
|
170
244
|
```
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
│
|
|
188
|
-
│
|
|
189
|
-
│
|
|
190
|
-
|
|
245
|
+
┌──────────────────────────────────────────────────┐
|
|
246
|
+
│ PrinterFactory (工厂层) │
|
|
247
|
+
│ createBluetoothPrinter · createWebBluetooth │
|
|
248
|
+
└─────────────────────┬────────────────────────────┘
|
|
249
|
+
│
|
|
250
|
+
▼
|
|
251
|
+
┌──────────────────────────────────────────────────┐
|
|
252
|
+
│ BluetoothPrinter (核心层) │
|
|
253
|
+
│ text() · feed() · qr() · cut() · image() │
|
|
254
|
+
│ print() · setOptions() · on() / off() │
|
|
255
|
+
└──────────┬───────────────────────┬───────────────┘
|
|
256
|
+
│ │
|
|
257
|
+
┌────────▼────────┐ ┌───────▼────────┐
|
|
258
|
+
│ Drivers (驱动) │ │ Adapters (适配) │
|
|
259
|
+
│ │ │ │
|
|
260
|
+
│ EscPos │ │ TaroAdapter │
|
|
261
|
+
│ TsplDriver │ │ WebBluetooth │
|
|
262
|
+
│ ZplDriver │ │ ReactNative │
|
|
263
|
+
│ CpclDriver │ │ AlipayAdapter │
|
|
264
|
+
│ StarPrinter │ │ BaiduAdapter │
|
|
265
|
+
│ GPrinter │ │ ByteDance │
|
|
266
|
+
│ Xprinter │ │ QQAdapter │
|
|
267
|
+
│ SprtDriver │ │ │
|
|
268
|
+
└────────┬────────┘ └───────┬────────┘
|
|
269
|
+
│ │
|
|
270
|
+
└───────────┬───────────┘
|
|
271
|
+
▼
|
|
272
|
+
┌──────────────────────────────────────────────────┐
|
|
273
|
+
│ Services (服务层) │
|
|
274
|
+
│ │
|
|
275
|
+
│ PrintJob · Cache · Queue · History │
|
|
276
|
+
│ Statistics · Scheduler · Batch │
|
|
277
|
+
│ EventBus · DIContainer · PluginSystem │
|
|
278
|
+
└──────────────────────────────────────────────────┘
|
|
191
279
|
```
|
|
192
280
|
|
|
193
281
|
---
|
|
194
282
|
|
|
195
|
-
##
|
|
283
|
+
## 📊 性能指标
|
|
284
|
+
|
|
285
|
+
| 指标 | 值 |
|
|
286
|
+
|:-----|:---|
|
|
287
|
+
| 包体积(gzip) | **~226 KB**(含全部驱动,无外部依赖) |
|
|
288
|
+
| Tree-shaking | ✅ 支持,按需引入 |
|
|
289
|
+
| 编码懒加载 | ✅ 未用到的字符集不进入产物 |
|
|
290
|
+
| 测试用例 | ✅ **879** 个测试用例,**879** 通过(95.7%),覆盖阈值 70%+ |
|
|
291
|
+
| 架构模式 | Template Method (ChunkWriteStrategy)、EventEmitter 统一、withTimeout 工具函数 |
|
|
292
|
+
| 构建工具 | Vite + Vitest |
|
|
293
|
+
|
|
294
|
+
---
|
|
295
|
+
|
|
296
|
+
## 📂 示例项目
|
|
196
297
|
|
|
197
298
|
| 示例 | 路径 |
|
|
198
|
-
|
|
299
|
+
|:-----|:-----|
|
|
199
300
|
| 微信小程序 | [examples/weapp](./examples/weapp) |
|
|
200
301
|
| H5 | [examples/h5](./examples/h5) |
|
|
201
|
-
| 鸿蒙 | [examples/harmonyos](./examples/harmonyos) |
|
|
302
|
+
| 鸿蒙 HarmonyOS | [examples/harmonyos](./examples/harmonyos) |
|
|
202
303
|
| React Native | [examples/react-native](./examples/react-native) |
|
|
203
304
|
|
|
204
305
|
---
|
|
205
306
|
|
|
206
|
-
## 文档
|
|
307
|
+
## 📖 文档
|
|
207
308
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
309
|
+
| 文档 | 说明 |
|
|
310
|
+
|:-----|:-----|
|
|
311
|
+
| [快速开始](https://agions.github.io/taro-bluetooth-print/guide/getting-started) | 5 分钟入门教程 |
|
|
312
|
+
| [功能特性](https://agions.github.io/taro-bluetooth-print/guide/features) | 全部功能详解 |
|
|
313
|
+
| [驱动支持](https://agions.github.io/taro-bluetooth-print/guide/drivers) | ESC/POS、TSPL、ZPL 驱动说明 |
|
|
314
|
+
| [核心概念](https://agions.github.io/taro-bluetooth-print/guide/core-concepts) | 架构设计与核心概念 |
|
|
315
|
+
| [API 参考](https://agions.github.io/taro-bluetooth-print/api) | 完整 API 文档 |
|
|
316
|
+
| [常见问题](https://agions.github.io/taro-bluetooth-print/guide/faq) | FAQ |
|
|
214
317
|
|
|
215
318
|
---
|
|
216
319
|
|
|
217
|
-
## 开发
|
|
320
|
+
## 🛠️ 开发
|
|
218
321
|
|
|
219
322
|
```bash
|
|
323
|
+
# 克隆仓库
|
|
220
324
|
git clone https://github.com/Agions/taro-bluetooth-print.git
|
|
221
325
|
cd taro-bluetooth-print
|
|
326
|
+
|
|
327
|
+
# 安装依赖
|
|
222
328
|
pnpm install
|
|
223
329
|
|
|
224
|
-
|
|
225
|
-
pnpm
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
pnpm
|
|
330
|
+
# 运行测试
|
|
331
|
+
pnpm test
|
|
332
|
+
|
|
333
|
+
# 代码检查
|
|
334
|
+
pnpm lint
|
|
335
|
+
|
|
336
|
+
# TypeScript 类型检查
|
|
337
|
+
pnpm type-check
|
|
338
|
+
|
|
339
|
+
# 构建产物
|
|
340
|
+
pnpm build
|
|
341
|
+
|
|
342
|
+
# 本地文档开发
|
|
343
|
+
pnpm docs:dev
|
|
229
344
|
```
|
|
230
345
|
|
|
231
346
|
---
|
|
232
347
|
|
|
233
|
-
## 许可证
|
|
348
|
+
## 📄 许可证
|
|
234
349
|
|
|
235
|
-
[MIT](./LICENSE) · Copyright © 2024-present Agions
|
|
350
|
+
[MIT](./LICENSE) · Copyright © 2024-present [Agions](https://github.com/Agions)
|