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