tanmi-dock 0.6.0 → 0.6.1
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/README.md +129 -260
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,317 +2,186 @@
|
|
|
2
2
|
|
|
3
3
|
集中型第三方库链接管理工具 - 通过符号链接统一管理多项目共享的第三方依赖库。
|
|
4
4
|
|
|
5
|
-
##
|
|
6
|
-
|
|
7
|
-
- **集中存储**: 所有第三方库统一存储在一个 Store 目录,避免重复下载
|
|
8
|
-
- **符号链接**: 通过 symlink 将 Store 中的库链接到项目目录,节省磁盘空间
|
|
9
|
-
- **多平台支持**: 支持 macOS/iOS/Android/Windows/Linux/WASM/OHOS 等平台,可同时选择多个平台
|
|
10
|
-
- **按平台下载**: 仅下载所需平台的内容,节省带宽和存储空间
|
|
11
|
-
- **智能识别**: 自动识别已有库,支持吸收本地库到 Store
|
|
12
|
-
- **事务安全**: link 操作支持事务回滚,中断后可恢复
|
|
13
|
-
- **文件锁**: 防止并发操作导致数据损坏
|
|
14
|
-
|
|
15
|
-
## 安装
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
# 克隆仓库
|
|
19
|
-
git clone <repo-url>
|
|
20
|
-
cd tanmi-dock
|
|
21
|
-
|
|
22
|
-
# 安装依赖
|
|
23
|
-
npm install
|
|
5
|
+
## 为什么使用 TanmiDock?
|
|
24
6
|
|
|
25
|
-
|
|
26
|
-
npm run build
|
|
7
|
+
当你有多个项目共享相同的第三方库(如 OpenCV、FFmpeg、Boost 等)时:
|
|
27
8
|
|
|
28
|
-
# 全局安装(可选)
|
|
29
|
-
npm link
|
|
30
9
|
```
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
# 1. 初始化(首次使用)
|
|
36
|
-
tanmi-dock init
|
|
37
|
-
|
|
38
|
-
# 2. 在项目目录执行链接
|
|
39
|
-
cd your-project
|
|
40
|
-
tanmi-dock link
|
|
41
|
-
|
|
42
|
-
# 3. 查看状态
|
|
43
|
-
tanmi-dock status
|
|
10
|
+
项目A/3rdparty/opencv/ → 500MB
|
|
11
|
+
项目B/3rdparty/opencv/ → 500MB (相同内容!)
|
|
12
|
+
项目C/3rdparty/opencv/ → 500MB (又重复了!)
|
|
44
13
|
```
|
|
45
14
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
### `init` - 初始化
|
|
15
|
+
使用 TanmiDock 后:
|
|
49
16
|
|
|
50
|
-
首次使用前初始化 TanmiDock,设置 Store 存储路径。
|
|
51
|
-
|
|
52
|
-
```bash
|
|
53
|
-
tanmi-dock init [options]
|
|
54
|
-
|
|
55
|
-
选项:
|
|
56
|
-
--store-path <path> 直接指定存储路径(跳过交互)
|
|
57
|
-
-y, --yes 使用默认设置
|
|
58
17
|
```
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
```bash
|
|
65
|
-
tanmi-dock link [path] [options]
|
|
66
|
-
|
|
67
|
-
参数:
|
|
68
|
-
path 项目路径(默认当前目录)
|
|
69
|
-
|
|
70
|
-
选项:
|
|
71
|
-
-p, --platform <platforms...> 指定平台,可多选 (mac/ios/android/win/linux/wasm/ohos)
|
|
72
|
-
-y, --yes 跳过确认提示
|
|
73
|
-
--no-download 不自动下载缺失库
|
|
74
|
-
--dry-run 只显示将要执行的操作
|
|
75
|
-
|
|
76
|
-
示例:
|
|
77
|
-
tanmi-dock link # 交互式选择平台
|
|
78
|
-
tanmi-dock link -p mac # 仅 macOS
|
|
79
|
-
tanmi-dock link -p mac ios # macOS + iOS
|
|
80
|
-
tanmi-dock link -p mac ios android # 多平台
|
|
18
|
+
Store/opencv/abc123/ → 500MB (唯一存储)
|
|
19
|
+
项目A/3rdparty/opencv/ → 符号链接
|
|
20
|
+
项目B/3rdparty/opencv/ → 符号链接
|
|
21
|
+
项目C/3rdparty/opencv/ → 符号链接
|
|
81
22
|
```
|
|
82
23
|
|
|
83
|
-
|
|
84
|
-
- **LINKED**: 已正确链接,跳过
|
|
85
|
-
- **RELINK**: 链接目标错误,重建链接
|
|
86
|
-
- **REPLACE**: 本地是目录但 Store 已有,替换为链接
|
|
87
|
-
- **ABSORB**: 本地有目录但 Store 没有,移入 Store 并创建链接
|
|
88
|
-
- **MISSING**: 本地和 Store 都没有,需要下载
|
|
89
|
-
- **LINK_NEW**: Store 有但本地没有,创建链接
|
|
24
|
+
**节省磁盘空间 + 统一管理 + 快速切换**
|
|
90
25
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
显示当前项目或 Store 的状态信息。
|
|
94
|
-
|
|
95
|
-
```bash
|
|
96
|
-
tanmi-dock status [options]
|
|
97
|
-
|
|
98
|
-
选项:
|
|
99
|
-
-s, --store 显示 Store 状态
|
|
100
|
-
-a, --all 显示所有详细信息
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
### `projects` - 项目管理
|
|
104
|
-
|
|
105
|
-
列出所有已注册的项目。
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
tanmi-dock projects [options]
|
|
109
|
-
|
|
110
|
-
选项:
|
|
111
|
-
-a, --all 显示详细信息
|
|
112
|
-
```
|
|
26
|
+
## 特性
|
|
113
27
|
|
|
114
|
-
|
|
28
|
+
- **集中存储**: 所有第三方库统一存储在 Store 目录,避免重复下载
|
|
29
|
+
- **符号链接**: 通过 symlink 链接到项目,节省磁盘空间
|
|
30
|
+
- **多平台支持**: macOS / iOS / Android / Windows / Linux / WASM / OHOS
|
|
31
|
+
- **按平台下载**: 仅下载所需平台,节省带宽和存储
|
|
32
|
+
- **嵌套依赖**: 自动处理库的嵌套依赖
|
|
33
|
+
- **智能识别**: 自动识别本地已有库,支持吸收到 Store
|
|
34
|
+
- **平台记忆**: 记住上次选择的平台,下次自动应用
|
|
35
|
+
- **断链检测**: 自动检测并修复失效的符号链接
|
|
36
|
+
- **事务安全**: 操作支持回滚,中断后可恢复
|
|
37
|
+
- **自动清理**: 多种清理策略,容量超限时自动提示
|
|
115
38
|
|
|
116
|
-
|
|
39
|
+
## 安装
|
|
117
40
|
|
|
118
41
|
```bash
|
|
119
|
-
|
|
42
|
+
# npm 安装
|
|
43
|
+
npm install -g tanmi-dock
|
|
120
44
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
45
|
+
# 或从源码
|
|
46
|
+
git clone https://github.com/tanmika/TanmiDock.git
|
|
47
|
+
cd tanmi-dock && npm install && npm run build && npm link
|
|
124
48
|
```
|
|
125
49
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
解除项目依赖的符号链接,恢复为普通目录。
|
|
50
|
+
## 快速开始
|
|
129
51
|
|
|
130
52
|
```bash
|
|
131
|
-
|
|
53
|
+
# 1. 初始化(首次使用)
|
|
54
|
+
td init
|
|
132
55
|
|
|
133
|
-
|
|
134
|
-
|
|
56
|
+
# 2. 在项目目录执行链接
|
|
57
|
+
cd your-project
|
|
58
|
+
td link
|
|
135
59
|
|
|
136
|
-
|
|
137
|
-
|
|
60
|
+
# 3. 查看状态
|
|
61
|
+
td status
|
|
138
62
|
```
|
|
139
63
|
|
|
140
|
-
|
|
64
|
+
## 命令速查
|
|
141
65
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
66
|
+
| 命令 | 说明 |
|
|
67
|
+
|------|------|
|
|
68
|
+
| `td init` | 初始化,设置 Store 路径 |
|
|
69
|
+
| `td link` | 链接项目依赖 |
|
|
70
|
+
| `td link -p mac ios` | 指定平台链接 |
|
|
71
|
+
| `td status` | 查看当前项目状态 |
|
|
72
|
+
| `td status -s` | 查看 Store 状态 |
|
|
73
|
+
| `td projects` | 列出所有已链接项目 |
|
|
74
|
+
| `td clean` | 清理无引用的库 |
|
|
75
|
+
| `td unlink` | 解除链接,恢复为目录 |
|
|
76
|
+
| `td config` | 交互式配置 |
|
|
77
|
+
| `td doctor` | 环境诊断 |
|
|
78
|
+
| `td verify` | 完整性验证 |
|
|
79
|
+
| `td repair` | 修复问题 |
|
|
80
|
+
| `td update` | 更新到最新版本 |
|
|
81
|
+
| `td migrate <path>` | 迁移 Store 位置 |
|
|
156
82
|
|
|
157
|
-
|
|
83
|
+
**别名**: `td` = `tanmidock` = `tanmi-dock`
|
|
158
84
|
|
|
159
|
-
|
|
85
|
+
## 平台参数
|
|
160
86
|
|
|
161
87
|
```bash
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
newPath 新的 Store 路径
|
|
166
|
-
|
|
167
|
-
选项:
|
|
168
|
-
--force 跳过确认提示
|
|
169
|
-
--keep-old 保留旧目录(默认删除)
|
|
88
|
+
td link -p mac # 仅 macOS
|
|
89
|
+
td link -p mac ios # macOS + iOS
|
|
90
|
+
td link -p mac ios android # 多平台
|
|
170
91
|
```
|
|
171
92
|
|
|
172
|
-
|
|
93
|
+
| 参数 | 平台 | ASAN 变体 |
|
|
94
|
+
|------|------|-----------|
|
|
95
|
+
| `mac` | macOS | macOS-asan |
|
|
96
|
+
| `win` | Windows | - |
|
|
97
|
+
| `ios` | iOS | iOS-asan |
|
|
98
|
+
| `android` | Android | android-asan, android-hwasan |
|
|
99
|
+
| `linux` | Linux/Ubuntu | - |
|
|
100
|
+
| `wasm` | WebAssembly | - |
|
|
101
|
+
| `ohos` | OpenHarmony | - |
|
|
173
102
|
|
|
174
|
-
|
|
103
|
+
## 配置
|
|
175
104
|
|
|
176
105
|
```bash
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
106
|
+
td config # 交互式配置界面
|
|
107
|
+
td config get <key> # 获取配置
|
|
108
|
+
td config set <key> <value> # 设置配置
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
### 配置项
|
|
112
|
+
|
|
113
|
+
| 配置项 | 说明 | 默认值 |
|
|
114
|
+
|--------|------|--------|
|
|
115
|
+
| `storePath` | Store 存储路径 | `~/.tanmi-dock/store` |
|
|
116
|
+
| `cleanStrategy` | 清理策略 | `unreferenced` |
|
|
117
|
+
| `unreferencedThreshold` | 容量阈值 (capacity 策略) | `10GB` |
|
|
118
|
+
| `unusedDays` | 未使用天数 (unused 策略) | `30` |
|
|
119
|
+
| `autoDownload` | 自动下载缺失库 | `true` |
|
|
120
|
+
| `concurrency` | 并发下载数 | `3` |
|
|
121
|
+
| `logLevel` | 日志级别 | `info` |
|
|
122
|
+
| `proxy` | 代理设置 | - |
|
|
123
|
+
|
|
124
|
+
### 清理策略
|
|
125
|
+
|
|
126
|
+
| 策略 | 说明 |
|
|
127
|
+
|------|------|
|
|
128
|
+
| `unreferenced` | 清理无项目引用的库(默认) |
|
|
129
|
+
| `unused` | 清理超过 N 天未使用的库 |
|
|
130
|
+
| `capacity` | 无引用库超过阈值时提示清理 |
|
|
131
|
+
| `manual` | 不自动清理 |
|
|
132
|
+
|
|
133
|
+
## 工作原理
|
|
134
|
+
|
|
135
|
+
```
|
|
136
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
137
|
+
│ │
|
|
138
|
+
│ 项目 A Store │
|
|
139
|
+
│ └── 3rdparty/ └── opencv/abc123/ │
|
|
140
|
+
│ └── opencv/ ─────────────→ macOS/ │
|
|
141
|
+
│ iOS/ │
|
|
142
|
+
│ 项目 B _shared/ │
|
|
143
|
+
│ └── 3rdparty/ │
|
|
144
|
+
│ └── opencv/ ─────────────→ (同上) │
|
|
145
|
+
│ │
|
|
146
|
+
└─────────────────────────────────────────────────────────────┘
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
- **Store**: 中央存储,库的实际文件存放处
|
|
150
|
+
- **平台目录**: 符号链接到 Store,节省空间
|
|
151
|
+
- **_shared**: 共享文件(cmake、README 等)物理复制到项目
|
|
188
152
|
|
|
189
|
-
|
|
153
|
+
## 常见问题
|
|
190
154
|
|
|
191
|
-
|
|
155
|
+
### Store 占用太大?
|
|
192
156
|
|
|
193
157
|
```bash
|
|
194
|
-
|
|
158
|
+
td clean # 清理无引用的库
|
|
159
|
+
td config set cleanStrategy capacity
|
|
160
|
+
td config set unreferencedThreshold 5GB # 设置阈值
|
|
195
161
|
```
|
|
196
162
|
|
|
197
|
-
|
|
198
|
-
- **悬挂链接**: 符号链接指向的目标不存在
|
|
199
|
-
- **孤立库**: Store 中存在但 Registry 未记录的库
|
|
200
|
-
- **缺失库**: Registry 记录但 Store 中不存在的库
|
|
201
|
-
- **无效项目**: 已注册但路径不存在的项目
|
|
202
|
-
|
|
203
|
-
### `repair` - 修复问题
|
|
204
|
-
|
|
205
|
-
修复 verify 检测到的问题。
|
|
163
|
+
### 切换分支后链接失效?
|
|
206
164
|
|
|
207
165
|
```bash
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
选项:
|
|
211
|
-
--dry-run 只显示将执行的操作
|
|
212
|
-
--prune 删除孤立库(默认登记到 Registry)
|
|
213
|
-
--force 跳过确认提示
|
|
166
|
+
td link # 重新链接会自动修复
|
|
214
167
|
```
|
|
215
168
|
|
|
216
|
-
|
|
217
|
-
- 清理过期项目记录
|
|
218
|
-
- 移除悬挂的符号链接
|
|
219
|
-
- 登记或删除孤立库
|
|
220
|
-
|
|
221
|
-
## 配置文件
|
|
222
|
-
|
|
223
|
-
### codepac-dep.json
|
|
224
|
-
|
|
225
|
-
项目依赖配置文件,定义需要链接的第三方库。
|
|
226
|
-
|
|
227
|
-
```json
|
|
228
|
-
{
|
|
229
|
-
"version": "1.0.0",
|
|
230
|
-
"vars": {
|
|
231
|
-
"LIBS_ROOT": "../3rdparty"
|
|
232
|
-
},
|
|
233
|
-
"repos": {
|
|
234
|
-
"common": [
|
|
235
|
-
{
|
|
236
|
-
"url": "https://github.com/user/repo.git",
|
|
237
|
-
"commit": "abc1234",
|
|
238
|
-
"branch": "main",
|
|
239
|
-
"dir": "${LIBS_ROOT}/repo"
|
|
240
|
-
}
|
|
241
|
-
]
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
```
|
|
169
|
+
### 如何查看哪些库没被引用?
|
|
245
170
|
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
配置文件位置:
|
|
249
|
-
- macOS/Linux: `~/.tanmi-dock/config.json`
|
|
250
|
-
- Windows: `%USERPROFILE%\.tanmi-dock\config.json`
|
|
251
|
-
|
|
252
|
-
配置项:
|
|
253
|
-
- `storePath`: Store 存储路径
|
|
254
|
-
- `cleanStrategy`: 清理策略 (`unreferenced` | `lru` | `manual`)
|
|
255
|
-
- `autoDownload`: 是否自动下载缺失库
|
|
256
|
-
|
|
257
|
-
## 目录结构
|
|
258
|
-
|
|
259
|
-
### Store 结构 (v0.6.0+)
|
|
260
|
-
|
|
261
|
-
```
|
|
262
|
-
Store/
|
|
263
|
-
└── libImageCodec/
|
|
264
|
-
└── 38648c31/
|
|
265
|
-
├── macOS/ # 平台特定内容
|
|
266
|
-
├── iOS/
|
|
267
|
-
├── android/
|
|
268
|
-
└── _shared/ # 共享文件
|
|
269
|
-
├── codepac-dep.json
|
|
270
|
-
├── *.cmake
|
|
271
|
-
└── README.md
|
|
272
|
-
```
|
|
273
|
-
|
|
274
|
-
**平台目录识别规则**: macOS, macOS-asan, Win, iOS, iOS-asan, android, android-asan, android-hwasan, ubuntu, wasm, ohos
|
|
275
|
-
|
|
276
|
-
其他文件/目录都归入 `_shared/`。
|
|
277
|
-
|
|
278
|
-
### 链接后的项目结构
|
|
279
|
-
|
|
280
|
-
```
|
|
281
|
-
3rdParty/libImageCodec/
|
|
282
|
-
├── macOS/ → Store/.../macOS/ (符号链接)
|
|
283
|
-
├── iOS/ → Store/.../iOS/ (符号链接)
|
|
284
|
-
├── codepac-dep.json (复制)
|
|
285
|
-
└── *.cmake (复制)
|
|
171
|
+
```bash
|
|
172
|
+
td projects --tree # 树状显示库引用关系
|
|
286
173
|
```
|
|
287
174
|
|
|
288
|
-
|
|
289
|
-
- **共享文件**: 物理复制,避免多项目冲突
|
|
290
|
-
|
|
291
|
-
## 开发
|
|
175
|
+
### 如何迁移 Store 到其他磁盘?
|
|
292
176
|
|
|
293
177
|
```bash
|
|
294
|
-
|
|
295
|
-
npm run dev
|
|
296
|
-
|
|
297
|
-
# 运行测试
|
|
298
|
-
npm test
|
|
299
|
-
|
|
300
|
-
# 测试覆盖率
|
|
301
|
-
npm run test:coverage
|
|
302
|
-
|
|
303
|
-
# 代码检查
|
|
304
|
-
npm run lint
|
|
305
|
-
|
|
306
|
-
# 代码格式化
|
|
307
|
-
npm run format
|
|
178
|
+
td migrate /Volumes/Data/.tanmi-dock/store
|
|
308
179
|
```
|
|
309
180
|
|
|
310
|
-
##
|
|
181
|
+
## 更多文档
|
|
311
182
|
|
|
312
|
-
-
|
|
313
|
-
-
|
|
314
|
-
- Vitest (测试框架)
|
|
315
|
-
- ESLint + Prettier (代码质量)
|
|
183
|
+
- [CLI 完整文档](docs/CLI.md) - 所有命令的详细参数和示例
|
|
184
|
+
- [API 文档](docs/API.md) - 开发者接口文档
|
|
316
185
|
|
|
317
186
|
## 许可
|
|
318
187
|
|