@tq1086/urpf-cli 2.0.0 → 2.1.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 CHANGED
@@ -1,424 +1,665 @@
1
- # URPF CLI 工具
2
-
3
- 基于 URPF (Universal Resource Package Format) v1.0 规范的命令行打包工具。
4
-
5
- ## 项目链接
6
-
7
- - **首页**: https://gitcode.com/tq1086/urpf-cli
8
- - **仓库**: git@gitcode.com:tq1086/urpf-cli.git
9
- - **问题反馈**: https://gitcode.com/tq1086/urpf-cli/issues
10
-
11
- ## 功能特性
12
-
13
- - ✅ 将文件或目录打包成 URPF 格式
14
- - ✅ 从 URPF 文件中解包资源到文件系统
15
- - ✅ 向已有 URPF 包添加文件或目录
16
- - ✅ 从 URPF 包中移除文件(支持变量替换和通配符)
17
- - ✅ 支持 `.gitignore` 风格的忽略规则
18
- - ✅ 自动检测文件编码和换行符类型
19
- - ✅ 保留文件权限和元数据
20
- - ✅ 跨平台支持(Windows、Linux、macOS)
21
- - ✅ 按字节偏移量切片文件(从0开始)
22
- - ✅ 按行号切片文件(从1开始)
23
- - ✅ 输出 URPF 内容到屏幕
24
- - ✅ 复制 URPF 内容到剪贴板
25
- - ✅ 打包环境变量到 URPF 属性
26
- - ✅ 变量管理和环境变量管理
27
-
28
- ## 安装
29
-
30
- ```bash
31
- # 全局安装
32
- npm install -g @tq1086/urpf-cli
33
-
34
- # 本地安装
35
- npm install @tq1086/urpf-cli
36
- ```
37
-
38
- ## 使用方法
39
-
40
- ### 基本用法
41
-
42
- #### 打包命令 (pack)
43
-
44
- URPF CLI 提供了子命令结构,支持灵活的包管理操作。
45
-
46
- **创建新的 URPF 包**:
47
-
48
- ```bash
49
- # 创建新的 URPF 包
50
- urpf-cli pack create package.json
51
-
52
- # 打包目录
53
- urpf-cli pack create src/
54
-
55
- # 指定输出路径
56
- urpf-cli pack create src/ -o output.urpf.txt
57
-
58
- # 显示详细日志
59
- urpf-cli pack create src/ -v
60
-
61
- # 按字节偏移量切片(从0开始)
62
- urpf-cli pack create file.txt --byte 100:200
63
-
64
- # 按行号切片(从1开始)
65
- urpf-cli pack create file.txt --line 10:20
66
-
67
- # 输出到屏幕
68
- urpf-cli pack create file.txt --stdout
69
-
70
- # 复制到剪贴板
71
- urpf-cli pack create file.txt --clipboard
72
-
73
- # 打包环境变量
74
- urpf-cli pack create src/ --env API_KEY
75
- urpf-cli pack create src/ --env "*"
76
- ```
77
-
78
- **向已有 URPF 包添加文件**:
79
-
80
- ```bash
81
- # 添加单个文件
82
- urpf-cli pack add package.urpf.txt newfile.txt
83
-
84
- # 添加多个文件
85
- urpf-cli pack add package.urpf.txt file1.txt file2.txt
86
-
87
- # 添加目录
88
- urpf-cli pack add package.urpf.txt newdir/
89
-
90
- # 混合添加文件和目录
91
- urpf-cli pack add package.urpf.txt file1.txt dir1/ file2.txt
92
- ```
93
-
94
- **从 URPF 包移除文件**:
95
-
96
- ```bash
97
- # 移除单个文件
98
- urpf-cli pack remove package.urpf.txt oldfile.txt
99
-
100
- # 移除多个文件
101
- urpf-cli pack remove package.urpf.txt file1.txt file2.txt
102
-
103
- # 使用通配符
104
- urpf-cli pack remove package.urpf.txt "*.log"
105
-
106
- # 使用变量替换
107
- urpf-cli pack remove package.urpf.txt "${root}/config.json"
108
- ```
109
-
110
- #### 解包命令 (unpack)
111
-
112
- ```bash
113
- # 解包到当前目录
114
- urpf-cli unpack package.urpf.txt
115
-
116
- # 解包到指定目录
117
- urpf-cli unpack package.urpf.txt -o ./output
118
-
119
- # 只解压指定的文件
120
- urpf-cli unpack package.urpf.txt config.json
121
-
122
- # 只解压目录
123
- urpf-cli unpack package.urpf.txt src/
124
-
125
- # 解压多个文件
126
- urpf-cli unpack package.urpf.txt config.json src/index.js
127
-
128
- # 使用通配符
129
- urpf-cli unpack package.urpf.txt "*.js"
130
-
131
- # 强制覆盖已存在的文件
132
- urpf-cli unpack package.urpf.txt --force
133
-
134
- # 仅当源文件更新时才覆盖
135
- urpf-cli unpack package.urpf.txt --force-when-newer
136
-
137
- # 自动确认环境变量设置(无需用户交互)
138
- urpf-cli unpack package.urpf.txt --unpack-env
139
-
140
- # 应用变量替换到文件内容
141
- urpf-cli unpack package.urpf.txt --apply-variables
142
- ```
143
-
144
- #### 列出命令 (list)
145
-
146
- ```bash
147
- # 列出 URPF 包中的所有文件
148
- urpf-cli list package.urpf.txt
149
-
150
- # 按模式过滤文件
151
- urpf-cli list package.urpf.txt --pattern "*.js"
152
-
153
- # 以 JSON 格式输出
154
- urpf-cli list package.urpf.txt --json
155
-
156
- # 显示详细信息
157
- urpf-cli list package.urpf.txt -v
158
- ```
159
-
160
- #### 信息命令 (info)
161
-
162
- ```bash
163
- # 显示 URPF 包的摘要信息
164
- urpf-cli info package.urpf.txt
165
-
166
- # 以 JSON 格式输出
167
- urpf-cli info package.urpf.txt --json
168
-
169
- # 显示详细信息
170
- urpf-cli info package.urpf.txt -v
171
- ```
172
-
173
- #### 验证命令 (verify)
174
-
175
- ```bash
176
- # 验证 URPF 包的文件完整性
177
- urpf-cli verify package.urpf.txt
178
-
179
- # 尝试修复常见问题
180
- urpf-cli verify package.urpf.txt --fix
181
-
182
- # 显示详细日志
183
- urpf-cli verify package.urpf.txt -v
184
- ```
185
-
186
- #### 比较命令 (diff)
187
-
188
- ```bash
189
- # 比较两个 URPF 包
190
- urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt
191
-
192
- # 以 JSON 格式输出
193
- urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt --json
194
- ```
195
-
196
- #### 合并命令 (merge)
197
-
198
- ```bash
199
- # 合并多个 URPF 包
200
- urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt
201
-
202
- # 使用覆盖策略
203
- urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy overwrite
204
-
205
- # 使用重命名策略
206
- urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy rename
207
- ```
208
-
209
- #### 变量管理命令 (var)
210
-
211
- ```bash
212
- # 添加变量
213
- urpf-cli var add package.urpf.txt VERSION "1.0.0"
214
-
215
- # 列出所有变量
216
- urpf-cli var list package.urpf.txt
217
-
218
- # 删除变量
219
- urpf-cli var remove package.urpf.txt VERSION
220
-
221
- # 清除所有变量
222
- urpf-cli var clear package.urpf.txt
223
- ```
224
-
225
- #### 环境变量管理命令 (env)
226
-
227
- ```bash
228
- # 添加环境变量(使用系统值)
229
- urpf-cli env add package.urpf.txt API_KEY
230
-
231
- # 添加环境变量(指定值)
232
- urpf-cli env add package.urpf.txt API_KEY "my-secret-key"
233
-
234
- # 列出所有环境变量
235
- urpf-cli env list package.urpf.txt
236
-
237
- # 删除环境变量
238
- urpf-cli env remove package.urpf.txt API_KEY
239
-
240
- # 清除所有环境变量
241
- urpf-cli env clear package.urpf.txt
242
- ```
243
-
244
- ### 文件后缀
245
-
246
- URPF 文件使用 `.urpf.txt` 后缀,这是一种文本格式的资源包文件。
247
-
248
- ### 环境变量支持
249
-
250
- **打包环境变量**:
251
- - 使用 `--env <name>` 打包单个环境变量
252
- - 使用 `--env "*"` 打包全部环境变量(排除含 "key" 的变量)
253
- - 使用 `--env <name> <value>` 指定环境变量的值
254
-
255
- **解包环境变量**:
256
- - 如果 URPF 包包含环境变量,解包时会提示用户是否设置
257
- - 使用 `--unpack-env` 选项可自动确认环境变量设置(无需用户交互)
258
- - 使用 `--apply-variables` 选项可应用变量替换到文件内容
259
-
260
- ### 变量替换
261
-
262
- URPF 包支持变量替换功能,可以在打包和解包时使用变量。
263
-
264
- **定义变量**:
265
- ```bash
266
- urpf-cli var add package.urpf.txt ROOT "/path/to/root"
267
- urpf-cli var add package.urpf.txt VERSION "1.0.0"
268
- ```
269
-
270
- **使用变量**:
271
- ```bash
272
- # 在 pack remove 中使用变量
273
- urpf-cli pack remove package.urpf.txt "${ROOT}/config.json"
274
- urpf-cli pack remove package.urpf.txt "${VERSION}.txt"
275
-
276
- # 在文件内容中使用变量(解包时)
277
- urpf-cli unpack package.urpf.txt --apply-variables
278
- ```
279
-
280
- ### 忽略规则
281
-
282
- URPF CLI 支持 `.gitignore` 风格的忽略规则。
283
-
284
- **默认忽略规则文件**:
285
- - `.gitignore`
286
- - `.urpfignore`
287
-
288
- **白名单和黑名单**:
289
- - `.urpfallow` - 白名单文件(格式与 .gitignore 一致)
290
- - `.urpfforbid` - 黑名单文件(格式与 .gitignore 一致)
291
-
292
- **文件打包规则**:
293
- - 不在黑名单内
294
- - 不在 ignore
295
- - 在白名单内(或无白名单)
296
- - 不以点开头
297
-
298
- **指定忽略规则文件**:
299
- ```bash
300
- urpf-cli pack create src/ -i .customignore
301
- ```
302
-
303
- ## 高级用法
304
-
305
- ### 字节切片
306
-
307
- 按字节偏移量切片文件,从 0 开始。
308
-
309
- ```bash
310
- # 切片从字节 100 到 200
311
- urpf-cli pack create file.txt --byte 100:200
312
-
313
- # 切片从字节 100 到文件末尾
314
- urpf-cli pack create file.txt --byte 100
315
-
316
- # 切片从文件开头到字节 200
317
- urpf-cli pack create file.txt --byte :200
318
- ```
319
-
320
- ### 行切片
321
-
322
- 按行号切片文件,从 1 开始。
323
-
324
- ```bash
325
- # 切片第 10 到 20 行
326
- urpf-cli pack create file.txt --line 10:20
327
-
328
- # 切片第 10 行到文件末尾
329
- urpf-cli pack create file.txt --line 10
330
-
331
- # 切片从文件开头到第 20
332
- urpf-cli pack create file.txt --line :20
333
- ```
334
-
335
- ### 跨平台路径处理
336
-
337
- URPF CLI 自动处理不同操作系统的路径分隔符。
338
-
339
- ```bash
340
- # Windows
341
- urpf-cli pack create C:\project\src\
342
-
343
- # Linux/macOS
344
- urpf-cli pack create /home/user/project/src/
345
-
346
- # 相对路径
347
- urpf-cli pack create ./src/
348
- ```
349
-
350
- ## 项目结构
351
-
352
- ```
353
- urpf-cli/
354
- ├── src/
355
- │ ├── commands/ # 命令实现
356
- │ │ ├── pack.ts
357
- │ │ ├── unpack.ts
358
- │ │ ├── pack-add.ts
359
- │ │ ├── pack-remove.ts
360
- │ │ ├── list.ts
361
- │ │ ├── info.ts
362
- │ │ ├── verify.ts
363
- │ │ ├── diff.ts
364
- │ │ ├── merge.ts
365
- │ │ ├── var.ts
366
- │ │ ├── env.ts
367
- │ │ └── types.ts
368
- │ ├── core/
369
- │ │ ├── parser/ # URPF 解析器
370
- │ │ ├── scanner/ # 文件扫描器
371
- │ │ ├── generator/ # URPF 生成器
372
- │ │ └── engine/ # UDRS 集成层
373
- │ ├── utils/ # 工具函数
374
- │ └── index.ts # CLI 入口
375
- ├── tests/ # 测试文件
376
- ├── examples/ # 示例文件
377
- ├── package.json
378
- ├── tsconfig.json
379
- └── readme.md
380
- ```
381
-
382
- ## 开发
383
-
384
- ### 安装依赖
385
-
386
- ```bash
387
- npm install
388
- ```
389
-
390
- ### 构建项目
391
-
392
- ```bash
393
- npm run build
394
- ```
395
-
396
- ### 运行测试
397
-
398
- ```bash
399
- npm test
400
- ```
401
-
402
- ### 代码检查
403
-
404
- ```bash
405
- npm run lint
406
- ```
407
-
408
- ### 代码格式化
409
-
410
- ```bash
411
- npm run format
412
- ```
413
-
414
- ## 许可证
415
-
416
- MIT License
417
-
418
- ## 贡献
419
-
420
- 欢迎提交 Issue Pull Request!
421
-
422
- ## 更新日志
423
-
1
+ # URPF CLI 工具
2
+
3
+ 基于 URPF (Universal Resource Package Format) v1.0 规范的命令行打包工具。
4
+
5
+ ## 项目链接
6
+
7
+ - **首页**: https://gitcode.com/tq1086/urpf-cli
8
+ - **仓库**: git@gitcode.com:tq1086/urpf-cli.git
9
+ - **问题反馈**: https://gitcode.com/tq1086/urpf-cli/issues
10
+
11
+ ## 功能特性
12
+
13
+ - ✅ 将文件或目录打包成 URPF 格式
14
+ - ✅ 从 URPF 文件中解包资源到文件系统
15
+ - ✅ 向已有 URPF 包添加文件或目录
16
+ - ✅ 从 URPF 包中移除文件(支持变量替换和通配符)
17
+ - ✅ 支持 `.gitignore` 风格的忽略规则
18
+ - ✅ 自动检测文件编码和换行符类型
19
+ - ✅ 保留文件权限和元数据
20
+ - ✅ 跨平台支持(Windows、Linux、macOS)
21
+ - ✅ 按字节偏移量切片文件(从0开始)
22
+ - ✅ 按行号切片文件(从1开始)
23
+ - ✅ 输出 URPF 内容到屏幕
24
+ - ✅ 复制 URPF 内容到剪贴板
25
+ - ✅ 打包环境变量到 URPF 属性
26
+ - ✅ 变量管理和环境变量管理
27
+ - ✅ **配置文件合并** - 支持多个配置文件合并,支持 overwrite/skip/rename 三种冲突处理策略
28
+ - ✅ **Key 提取历史记录** - 记录、查看、重用历史 key 提取操作
29
+ - ✅ **远程配置文件支持** - 支持 HTTP/HTTPS,支持 Basic Auth/Bearer Token 认证
30
+ - ✅ **配置差异对比** - 对比配置文件差异,识别 SAME/CHANGED/ADDED/REMOVED 类型
31
+
32
+ ## 安装
33
+
34
+ ```bash
35
+ # 全局安装
36
+ npm install -g @tq1086/urpf-cli
37
+
38
+ # 本地安装
39
+ npm install @tq1086/urpf-cli
40
+ ```
41
+
42
+ ## 使用方法
43
+
44
+ ### 基本用法
45
+
46
+ #### 打包命令 (pack)
47
+
48
+ URPF CLI 提供了子命令结构,支持灵活的包管理操作。
49
+
50
+ **创建新的 URPF 包**:
51
+
52
+ ```bash
53
+ # 创建新的 URPF
54
+ urpf-cli pack create package.json
55
+
56
+ # 打包目录
57
+ urpf-cli pack create src/
58
+
59
+ # 指定输出路径
60
+ urpf-cli pack create src/ -o output.urpf.txt
61
+
62
+ # 显示详细日志
63
+ urpf-cli pack create src/ -v
64
+
65
+ # 按字节偏移量切片(从0开始)
66
+ urpf-cli pack create file.txt --byte 100:200
67
+
68
+ # 按行号切片(从1开始)
69
+ urpf-cli pack create file.txt --line 10:20
70
+
71
+ # 输出到屏幕
72
+ urpf-cli pack create file.txt --stdout
73
+
74
+ # 复制到剪贴板
75
+ urpf-cli pack create file.txt --clipboard
76
+
77
+ # 打包环境变量
78
+ urpf-cli pack create src/ --env API_KEY
79
+ urpf-cli pack create src/ --env "*"
80
+ ```
81
+
82
+ **向已有 URPF 包添加文件**:
83
+
84
+ ```bash
85
+ # 添加单个文件
86
+ urpf-cli pack add package.urpf.txt newfile.txt
87
+
88
+ # 添加多个文件
89
+ urpf-cli pack add package.urpf.txt file1.txt file2.txt
90
+
91
+ # 添加目录
92
+ urpf-cli pack add package.urpf.txt newdir/
93
+
94
+ # 混合添加文件和目录
95
+ urpf-cli pack add package.urpf.txt file1.txt dir1/ file2.txt
96
+ ```
97
+
98
+ **从 URPF 包移除文件**:
99
+
100
+ ```bash
101
+ # 移除单个文件
102
+ urpf-cli pack remove package.urpf.txt oldfile.txt
103
+
104
+ # 移除多个文件
105
+ urpf-cli pack remove package.urpf.txt file1.txt file2.txt
106
+
107
+ # 使用通配符
108
+ urpf-cli pack remove package.urpf.txt "*.log"
109
+
110
+ # 使用变量替换
111
+ urpf-cli pack remove package.urpf.txt "${root}/config.json"
112
+ ```
113
+
114
+ #### 解包命令 (unpack)
115
+
116
+ ```bash
117
+ # 解包到当前目录
118
+ urpf-cli unpack package.urpf.txt
119
+
120
+ # 解包到指定目录
121
+ urpf-cli unpack package.urpf.txt -o ./output
122
+
123
+ # 只解压指定的文件
124
+ urpf-cli unpack package.urpf.txt config.json
125
+
126
+ # 只解压目录
127
+ urpf-cli unpack package.urpf.txt src/
128
+
129
+ # 解压多个文件
130
+ urpf-cli unpack package.urpf.txt config.json src/index.js
131
+
132
+ # 使用通配符
133
+ urpf-cli unpack package.urpf.txt "*.js"
134
+
135
+ # 强制覆盖已存在的文件
136
+ urpf-cli unpack package.urpf.txt --force
137
+
138
+ # 仅当源文件更新时才覆盖
139
+ urpf-cli unpack package.urpf.txt --force-when-newer
140
+
141
+ # 自动确认环境变量设置(无需用户交互)
142
+ urpf-cli unpack package.urpf.txt --unpack-env
143
+
144
+ # 应用变量替换到文件内容
145
+ urpf-cli unpack package.urpf.txt --apply-variables
146
+ ```
147
+
148
+ #### 列出命令 (list)
149
+
150
+ ```bash
151
+ # 列出 URPF 包中的所有文件
152
+ urpf-cli list package.urpf.txt
153
+
154
+ # 按模式过滤文件
155
+ urpf-cli list package.urpf.txt --pattern "*.js"
156
+
157
+ # JSON 格式输出
158
+ urpf-cli list package.urpf.txt --json
159
+
160
+ # 显示详细信息
161
+ urpf-cli list package.urpf.txt -v
162
+ ```
163
+
164
+ #### 信息命令 (info)
165
+
166
+ ```bash
167
+ # 显示 URPF 包的摘要信息
168
+ urpf-cli info package.urpf.txt
169
+
170
+ # JSON 格式输出
171
+ urpf-cli info package.urpf.txt --json
172
+
173
+ # 显示详细信息
174
+ urpf-cli info package.urpf.txt -v
175
+ ```
176
+
177
+ #### 验证命令 (verify)
178
+
179
+ ```bash
180
+ # 验证 URPF 包的文件完整性
181
+ urpf-cli verify package.urpf.txt
182
+
183
+ # 尝试修复常见问题
184
+ urpf-cli verify package.urpf.txt --fix
185
+
186
+ # 显示详细日志
187
+ urpf-cli verify package.urpf.txt -v
188
+ ```
189
+
190
+ #### 比较命令 (diff)
191
+
192
+ ```bash
193
+ # 比较两个 URPF
194
+ urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt
195
+
196
+ # JSON 格式输出
197
+ urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt --json
198
+ ```
199
+
200
+ #### 合并命令 (merge)
201
+
202
+ ```bash
203
+ # 合并多个 URPF
204
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt
205
+
206
+ # 使用覆盖策略
207
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy overwrite
208
+
209
+ # 使用重命名策略
210
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy rename
211
+ ```
212
+
213
+ #### 变量管理命令 (var)
214
+
215
+ ```bash
216
+ # 添加变量
217
+ urpf-cli var add package.urpf.txt VERSION "1.0.0"
218
+
219
+ # 列出所有变量
220
+ urpf-cli var list package.urpf.txt
221
+
222
+ # 删除变量
223
+ urpf-cli var remove package.urpf.txt VERSION
224
+
225
+ # 清除所有变量
226
+ urpf-cli var clear package.urpf.txt
227
+ ```
228
+
229
+ #### 环境变量管理命令 (env)
230
+
231
+ ```bash
232
+ # 添加环境变量(使用系统值)
233
+ urpf-cli env add package.urpf.txt API_KEY
234
+
235
+ # 添加环境变量(指定值)
236
+ urpf-cli env add package.urpf.txt API_KEY "my-secret-key"
237
+
238
+ # 列出所有环境变量
239
+ urpf-cli env list package.urpf.txt
240
+
241
+ # 删除环境变量
242
+ urpf-cli env remove package.urpf.txt API_KEY
243
+
244
+ # 清除所有环境变量
245
+ urpf-cli env clear package.urpf.txt
246
+ ```
247
+
248
+ ### 文件后缀
249
+
250
+ URPF 文件使用 `.urpf.txt` 后缀,这是一种文本格式的资源包文件。
251
+
252
+ ### Key 提取功能
253
+
254
+ URPF CLI 支持从多种配置文件格式中提取指定键值的功能。
255
+
256
+ **支持的文件格式**:
257
+ - JSON (.json)
258
+ - YAML (.yaml, .yml)
259
+ - TOML (.toml)
260
+ - XML (.xml)
261
+ - Properties (.properties)
262
+ - INI (.ini)
263
+
264
+ **打包时提取 key 值**:
265
+
266
+ ```bash
267
+ # JSON 文件提取 key
268
+ urpf-cli pack create config.json --key "server.port"
269
+
270
+ # 从 YAML 文件提取嵌套值
271
+ urpf-cli pack create config.yaml --key "database.host"
272
+
273
+ # TOML 文件提取值
274
+ urpf-cli pack create config.toml --key "app.version"
275
+
276
+ # 从 XML 文件提取值
277
+ urpf-cli pack create config.xml --key "root.server.port"
278
+
279
+ # 从 Properties 文件提取值
280
+ urpf-cli pack create config.properties --key "server.port"
281
+
282
+ # INI 文件提取值(支持 section)
283
+ urpf-cli pack create config.ini --key "database.host"
284
+
285
+ # 支持数组索引访问
286
+ urpf-cli pack create config.json --key "items[0].name"
287
+ urpf-cli pack create config.json --key "items.0.name" # 等价写法
288
+ ```
289
+
290
+ **解包时提取 key 值**:
291
+
292
+ ```bash
293
+ # 从 URPF 包中的配置文件提取 key 值
294
+ urpf-cli unpack package.urpf.txt --key "config.json:server.port"
295
+
296
+ # 提取多个 key 值
297
+ urpf-cli unpack package.urpf.txt --key "config.json:server.port" --key "config.json:server.host"
298
+
299
+ # 结合其他选项使用
300
+ urpf-cli unpack package.urpf.txt --key "config.json:server.port" --stdout
301
+ ```
302
+
303
+ **Key 语法说明**:
304
+
305
+ - **点分隔符**:使用 `.` 访问嵌套属性(如 `config.server.port`)
306
+ - **数组索引**:使用 `[n]` 或 `.n` 访问数组元素(如 `items[0]` 或 `items.0`)
307
+ - **组合路径**:支持组合使用(如 `items[0].name`)
308
+
309
+ **示例**:
310
+
311
+ ```json
312
+ // config.json
313
+ {
314
+ "server": {
315
+ "port": 3000,
316
+ "host": "localhost"
317
+ },
318
+ "items": [
319
+ { "name": "item1", "value": 100 },
320
+ { "name": "item2", "value": 200 }
321
+ ]
322
+ }
323
+ ```
324
+
325
+ ```bash
326
+ # 提取 server.port
327
+ urpf-cli pack create config.json --key "server.port"
328
+ # 输出: 3000
329
+
330
+ # 提取 items[0].name
331
+ urpf-cli pack create config.json --key "items[0].name"
332
+ # 输出: item1
333
+
334
+ # 提取 items.1.value(等价于 items[1].value)
335
+ urpf-cli pack create config.json --key "items.1.value"
336
+ # 输出: 200
337
+ ```
338
+
339
+ **注意事项**:
340
+ - `--key` 选项与 `--byte`、`--line` 选项互斥,不能同时使用
341
+ - 如果指定的 key 路径不存在,将抛出错误
342
+ - 对于 XML 文件,key 路径从根元素开始(如 `root.server.port`)
343
+ - 对于 Properties 和 INI 文件,支持 section 语法(如 `database.host`)
344
+
345
+ ### 环境变量支持
346
+
347
+ **打包环境变量**:
348
+ - 使用 `--env <name>` 打包单个环境变量
349
+ - 使用 `--env "*"` 打包全部环境变量(排除含 "key" 的变量)
350
+ - 使用 `--env <name> <value>` 指定环境变量的值
351
+
352
+ **解包环境变量**:
353
+ - 如果 URPF 包包含环境变量,解包时会提示用户是否设置
354
+ - 使用 `--unpack-env` 选项可自动确认环境变量设置(无需用户交互)
355
+ - 使用 `--apply-variables` 选项可应用变量替换到文件内容
356
+
357
+ ### 变量替换
358
+
359
+ URPF 包支持变量替换功能,可以在打包和解包时使用变量。
360
+
361
+ **定义变量**:
362
+ ```bash
363
+ urpf-cli var add package.urpf.txt ROOT "/path/to/root"
364
+ urpf-cli var add package.urpf.txt VERSION "1.0.0"
365
+ ```
366
+
367
+ **使用变量**:
368
+ ```bash
369
+ # pack remove 中使用变量
370
+ urpf-cli pack remove package.urpf.txt "${ROOT}/config.json"
371
+ urpf-cli pack remove package.urpf.txt "${VERSION}.txt"
372
+
373
+ # 在文件内容中使用变量(解包时)
374
+ urpf-cli unpack package.urpf.txt --apply-variables
375
+ ```
376
+
377
+ ### 忽略规则
378
+
379
+ URPF CLI 支持 `.gitignore` 风格的忽略规则。
380
+
381
+ **默认忽略规则文件**:
382
+ - `.gitignore`
383
+ - `.urpfignore`
384
+
385
+ **白名单和黑名单**:
386
+ - `.urpfallow` - 白名单文件(格式与 .gitignore 一致)
387
+ - `.urpfforbid` - 黑名单文件(格式与 .gitignore 一致)
388
+
389
+ **文件打包规则**:
390
+ - 不在黑名单内
391
+ - 不在 ignore 内
392
+ - 在白名单内(或无白名单)
393
+ - 不以点开头
394
+
395
+ **指定忽略规则文件**:
396
+ ```bash
397
+ urpf-cli pack create src/ -i .customignore
398
+ ```
399
+
400
+ ### 配置文件合并
401
+
402
+ URPF CLI 支持合并多个 URPF 包或配置文件,处理文件冲突。
403
+
404
+ **基本用法**:
405
+ ```bash
406
+ # 合并多个 URPF 包
407
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt pkg3.urpf.txt
408
+
409
+ # 使用覆盖策略(默认)
410
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy overwrite
411
+
412
+ # 使用跳过策略
413
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy skip
414
+
415
+ # 使用重命名策略
416
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt --strategy rename
417
+ ```
418
+
419
+ **冲突处理策略**:
420
+ - `overwrite` - 后文件覆盖前文件(默认)
421
+ - `skip` - 跳过冲突的文件
422
+ - `rename` - 重命名冲突的文件(如 `config.json` → `config_2.json`)
423
+
424
+ **示例**:
425
+ ```bash
426
+ # 合并两个包含相同文件的包
427
+ urpf-cli merge merged.urpf.txt base.urpf.txt override.urpf.txt --strategy overwrite
428
+
429
+ # 合并多个包并跳过冲突
430
+ urpf-cli merge merged.urpf.txt pkg1.urpf.txt pkg2.urpf.txt pkg3.urpf.txt --strategy skip
431
+ ```
432
+
433
+ ### Key 提取历史记录
434
+
435
+ URPF CLI 自动记录 Key 提取操作,支持查看历史记录和快速重用。
436
+
437
+ **历史记录功能**:
438
+ ```bash
439
+ # 查看所有历史记录
440
+ urpf-cli pack create config.json --key "server.port" --history
441
+
442
+ # 查看最近 10 条历史记录
443
+ urpf-cli pack create config.json --key "database.host" --history --limit 10
444
+
445
+ # 搜索历史记录
446
+ urpf-cli pack create config.json --key "server.port" --history --search "server"
447
+
448
+ # 清除历史记录
449
+ urpf-cli pack create config.json --key "server.port" --history --clear
450
+ ```
451
+
452
+ **历史记录位置**:
453
+ - 存储在用户主目录的 `.urpf/history.json`
454
+ - 默认保留最近 100 条记录
455
+ - 按时间倒序排列
456
+
457
+ **示例**:
458
+ ```bash
459
+ # 提取 key 并记录到历史
460
+ urpf-cli pack create config.json --key "server.port"
461
+
462
+ # 查看历史记录
463
+ urpf-cli history
464
+
465
+ # 重用历史记录(按索引)
466
+ urpf-cli pack create config.json --history --reuse 0
467
+ ```
468
+
469
+ ### 远程配置文件支持
470
+
471
+ URPF CLI 支持从远程 URL 直接提取 key 或打包配置文件。
472
+
473
+ **基本用法**:
474
+ ```bash
475
+ # 从远程 URL 提取 key
476
+ urpf-cli pack create https://example.com/config.json --key "server.port"
477
+
478
+ # 使用 Basic Auth
479
+ urpf-cli pack create https://user:password@example.com/config.json --key "database.host"
480
+
481
+ # 使用 Bearer Token
482
+ urpf-cli pack create https://api.example.com/config.json --key "api.key" --token "your-token-here"
483
+
484
+ # 设置超时时间(毫秒)
485
+ urpf-cli pack create https://example.com/config.json --key "server.port" --timeout 30000
486
+ ```
487
+
488
+ **支持的认证方式**:
489
+ - `none` - 无认证(默认)
490
+ - `basic` - Basic Auth(用户名:密码)
491
+ - `bearer` - Bearer Token
492
+ - `custom` - 自定义请求头
493
+
494
+ **示例**:
495
+ ```bash
496
+ # 从公共配置文件提取 key
497
+ urpf-cli pack create https://raw.githubusercontent.com/user/repo/main/config.json --key "app.version"
498
+
499
+ # 从需要认证的 API 获取配置
500
+ urpf-cli pack create https://api.example.com/config --token "your-bearer-token" --key "api.endpoint"
501
+ ```
502
+
503
+ ### 配置差异对比
504
+
505
+ URPF CLI 支持对比两个配置文件或 URPF 包的差异,生成详细的差异报告。
506
+
507
+ **基本用法**:
508
+ ```bash
509
+ # 对比两个 URPF 包
510
+ urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt
511
+
512
+ # 对比配置文件
513
+ urpf-cli diff config-dev.json config-prod.json
514
+
515
+ # 以 JSON 格式输出
516
+ urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt --json
517
+
518
+ # 显示相同的 key
519
+ urpf-cli diff config1.yaml config2.yaml --show-same
520
+ ```
521
+
522
+ **差异类型**:
523
+ - `SAME` - 值相同
524
+ - `CHANGED` - 值不同
525
+ - `ADDED` - 仅在第二个文件中存在
526
+ - `REMOVED` - 仅在第一个文件中存在
527
+
528
+ **示例**:
529
+ ```bash
530
+ # 对比两个环境配置
531
+ urpf-cli diff config.dev.json config.prod.json
532
+
533
+ # 输出 JSON 格式的差异报告
534
+ urpf-cli diff package-v1.urpf.txt package-v2.urpf.txt --json > diff-report.json
535
+
536
+ # 显示所有差异(包括相同的 key)
537
+ urpf-cli diff config1.yaml config2.yaml --show-same
538
+ ```
539
+
540
+ ## 高级用法
541
+
542
+ ### 字节切片
543
+
544
+ 按字节偏移量切片文件,从 0 开始。
545
+
546
+ ```bash
547
+ # 切片从字节 100 到 200
548
+ urpf-cli pack create file.txt --byte 100:200
549
+
550
+ # 切片从字节 100 到文件末尾
551
+ urpf-cli pack create file.txt --byte 100
552
+
553
+ # 切片从文件开头到字节 200
554
+ urpf-cli pack create file.txt --byte :200
555
+ ```
556
+
557
+ ### 行切片
558
+
559
+ 按行号切片文件,从 1 开始。
560
+
561
+ ```bash
562
+ # 切片第 10 到 20 行
563
+ urpf-cli pack create file.txt --line 10:20
564
+
565
+ # 切片第 10 行到文件末尾
566
+ urpf-cli pack create file.txt --line 10
567
+
568
+ # 切片从文件开头到第 20 行
569
+ urpf-cli pack create file.txt --line :20
570
+ ```
571
+
572
+ ### 跨平台路径处理
573
+
574
+ URPF CLI 自动处理不同操作系统的路径分隔符。
575
+
576
+ ```bash
577
+ # Windows
578
+ urpf-cli pack create C:\project\src\
579
+
580
+ # Linux/macOS
581
+ urpf-cli pack create /home/user/project/src/
582
+
583
+ # 相对路径
584
+ urpf-cli pack create ./src/
585
+ ```
586
+
587
+ ## 项目结构
588
+
589
+ ```
590
+ urpf-cli/
591
+ ├── src/
592
+ │ ├── commands/ # 命令实现
593
+ │ │ ├── pack.ts
594
+ │ │ ├── unpack.ts
595
+ │ │ ├── pack-add.ts
596
+ │ │ ├── pack-remove.ts
597
+ │ │ ├── list.ts
598
+ │ │ ├── info.ts
599
+ │ │ ├── verify.ts
600
+ │ │ ├── diff.ts
601
+ │ │ ├── merge.ts
602
+ │ │ ├── var.ts
603
+ │ │ ├── env.ts
604
+ │ │ └── types.ts
605
+ │ ├── core/
606
+ │ │ ├── parser/ # URPF 解析器
607
+ │ │ ├── scanner/ # 文件扫描器
608
+ │ │ ├── generator/ # URPF 生成器
609
+ │ │ ├── engine/ # UDRS 集成层
610
+ │ │ ├── merger/ # 配置合并器(新增)
611
+ │ │ ├── history/ # Key 历史记录(新增)
612
+ │ │ ├── remote/ # 远程文件获取(新增)
613
+ │ │ └── diff/ # 配置差异对比(新增)
614
+ │ ├── utils/ # 工具函数
615
+ │ └── index.ts # CLI 入口
616
+ ├── tests/ # 测试文件
617
+ ├── examples/ # 示例文件
618
+ ├── package.json
619
+ ├── tsconfig.json
620
+ └── readme.md
621
+ ```
622
+
623
+ ## 开发
624
+
625
+ ### 安装依赖
626
+
627
+ ```bash
628
+ npm install
629
+ ```
630
+
631
+ ### 构建项目
632
+
633
+ ```bash
634
+ npm run build
635
+ ```
636
+
637
+ ### 运行测试
638
+
639
+ ```bash
640
+ npm test
641
+ ```
642
+
643
+ ### 代码检查
644
+
645
+ ```bash
646
+ npm run lint
647
+ ```
648
+
649
+ ### 代码格式化
650
+
651
+ ```bash
652
+ npm run format
653
+ ```
654
+
655
+ ## 许可证
656
+
657
+ MIT License
658
+
659
+ ## 贡献
660
+
661
+ 欢迎提交 Issue 和 Pull Request!
662
+
663
+ ## 更新日志
664
+
424
665
  查看 [CHANGELOG.md](CHANGELOG.md) 了解版本更新历史。