@shuiyangsuan/cli 0.0.2 → 0.0.4

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
@@ -45,6 +45,9 @@ by delete my-folder/
45
45
  # 使用别名
46
46
  by rm file.txt
47
47
  by del file.txt
48
+
49
+ # 无参数调用(使用配置文件中的 defaultPatterns)
50
+ by delete
48
51
  ```
49
52
 
50
53
  ### Glob 模式匹配
@@ -70,7 +73,7 @@ by delete "*.tmp" "*.cache" "dist/**"
70
73
  by delete "*.tmp" --force
71
74
  by delete "*.tmp" -f
72
75
 
73
- # 预览模式,仅查看将要删除的内容
76
+ # 预览模式,仅显示将要删除的内容
74
77
  by delete "*.tmp" --dry-run
75
78
  by delete "*.tmp" -n
76
79
 
@@ -96,6 +99,198 @@ by delete "*.tmp" "*.log" --force --verbose
96
99
  by delete "dist" "build" ".next" --dry-run
97
100
  ```
98
101
 
102
+ ## 🔧 编程模式
103
+
104
+ 本 CLI 工具支持以编程方式调用,方便在其他 Node.js 项目中使用。
105
+
106
+ ### 安装
107
+
108
+ ```bash
109
+ npm install @shuiyangsuan/cli
110
+ ```
111
+
112
+ ### 基础用法
113
+
114
+ ```typescript
115
+ import { executeDelete, readConfig } from '@shuiyangsuan/cli';
116
+
117
+ // 读取配置
118
+ const config = await readConfig();
119
+
120
+ // 执行删除
121
+ const result = await executeDelete(['node_modules', 'dist'], config, {
122
+ force: true, // 强制删除,不提示确认
123
+ verbose: true, // 详细输出
124
+ });
125
+
126
+ console.log(`成功删除 ${result.deletedCount} 个文件`);
127
+ console.log('删除的文件:', result.deletedFiles);
128
+ ```
129
+
130
+ ### 预览模式
131
+
132
+ ```typescript
133
+ import { executeDelete, readConfig } from '@shuiyangsuan/cli';
134
+
135
+ const config = await readConfig();
136
+
137
+ // 预览将要删除的内容,不实际删除
138
+ const result = await executeDelete(['**/*.log', 'dist'], config, {
139
+ dryRun: true,
140
+ verbose: true,
141
+ });
142
+
143
+ console.log('将要删除的文件:', result.deletedFiles);
144
+ ```
145
+
146
+ ### 仅收集文件列表
147
+
148
+ ```typescript
149
+ import { collectFilesToDelete } from '@shuiyangsuan/cli';
150
+
151
+ // 仅收集匹配的文件列表,不执行删除
152
+ const files = await collectFilesToDelete(['**/*.ts', '**/*.js'], {});
153
+
154
+ console.log('匹配的文件:');
155
+ files.forEach((file) => console.log(` - ${file}`));
156
+ ```
157
+
158
+ ### 在构建脚本中使用
159
+
160
+ ```typescript
161
+ // build.ts
162
+ import { executeDelete, readConfig } from '@shuiyangsuan/cli';
163
+ import { execSync } from 'child_process';
164
+
165
+ async function build() {
166
+ const config = await readConfig();
167
+
168
+ // 清理旧的构建产物
169
+ await executeDelete(['dist', 'build'], config, {
170
+ force: true,
171
+ verbose: true,
172
+ });
173
+
174
+ // 执行构建
175
+ execSync('tsc', { stdio: 'inherit' });
176
+
177
+ console.log('构建完成!');
178
+ }
179
+
180
+ build().catch(console.error);
181
+ ```
182
+
183
+ ### 完整示例 - 带错误处理
184
+
185
+ ```typescript
186
+ import { executeDelete, readConfig, type DeleteResult } from '@shuiyangsuan/cli';
187
+
188
+ async function cleanup() {
189
+ try {
190
+ const config = await readConfig();
191
+
192
+ const result: DeleteResult = await executeDelete(['node_modules', 'dist', '**/*.log'], config, {
193
+ force: false, // 需要确认
194
+ verbose: true, // 详细输出
195
+ });
196
+
197
+ console.log('✅ 清理完成!');
198
+ console.log(`成功:${result.deletedCount}, 失败:${result.failedCount}`);
199
+
200
+ if (result.errors.length > 0) {
201
+ console.error('错误信息:');
202
+ result.errors.forEach((err) => console.error(` - ${err}`));
203
+ }
204
+ } catch (error) {
205
+ console.error('清理失败:', (error as Error).message);
206
+ process.exit(1);
207
+ }
208
+ }
209
+
210
+ cleanup();
211
+ ```
212
+
213
+ ### API 文档
214
+
215
+ #### executeDelete(patterns, config, options?)
216
+
217
+ 执行删除操作的主要函数。
218
+
219
+ **参数:**
220
+
221
+ - `patterns`: string[] - 要删除的文件或文件夹路径/模式
222
+ - `config`: CliConfig - CLI 配置对象
223
+ - `options`: DeleteOptions (可选) - 删除选项
224
+
225
+ **返回值:** Promise<DeleteResult>
226
+
227
+ **DeleteResult 接口:**
228
+
229
+ ```typescript
230
+ {
231
+ deletedCount: number; // 成功删除的数量
232
+ failedCount: number; // 失败的数量
233
+ deletedFiles: string[]; // 删除的文件列表
234
+ errors: string[]; // 错误信息列表
235
+ }
236
+ ```
237
+
238
+ #### DeleteOptions
239
+
240
+ ```typescript
241
+ {
242
+ force?: boolean; // 强制删除,不提示确认
243
+ dryRun?: boolean; // 预览模式,不实际删除
244
+ verbose?: boolean; // 详细输出模式
245
+ useDefaults?: boolean; // 使用配置文件中的默认模式
246
+ }
247
+ ```
248
+
249
+ #### collectFilesToDelete(patterns, options)
250
+
251
+ 收集匹配的文件列表,但不执行删除。
252
+
253
+ **参数:**
254
+
255
+ - `patterns`: string[] - 文件或文件夹路径/模式
256
+ - `options`: DeleteOptions - 删除选项
257
+
258
+ **返回值:** Promise<string[]>
259
+
260
+ ### 导入类型
261
+
262
+ ```typescript
263
+ import type {
264
+ DeleteOptions, // 删除选项
265
+ DeleteResult, // 删除结果
266
+ CliConfig, // 配置类型
267
+ } from '@shuiyangsuan/cli';
268
+ ```
269
+
270
+ ## 📝 配置文件
271
+
272
+ 可以通过配置文件自定义默认行为。
273
+
274
+ ### 配置文件格式
275
+
276
+ 创建 `.clirc.json` 或 `cli.config.json`:
277
+
278
+ ```json
279
+ {
280
+ "defaultPatterns": ["node_modules/**", "dist/**", "**/.turbo"],
281
+ "force": false,
282
+ "dryRun": false,
283
+ "verbose": true
284
+ }
285
+ ```
286
+
287
+ ### 配置项说明
288
+
289
+ - `defaultPatterns`: 默认的文件匹配模式列表
290
+ - `force`: 是否强制删除(跳过确认)
291
+ - `dryRun`: 预览模式(不实际删除)
292
+ - `verbose`: 详细输出模式
293
+
99
294
  ## 📖 命令说明
100
295
 
101
296
  ### delete (rm, del)
@@ -103,24 +298,28 @@ by delete "dist" "build" ".next" --dry-run
103
298
  删除文件和文件夹,支持 glob 模式匹配。
104
299
 
105
300
  **语法:**
301
+
106
302
  ```bash
107
303
  by delete <patterns...> [options]
108
304
  ```
109
305
 
110
306
  **参数:**
307
+
111
308
  - `<patterns...>` - 要删除的文件或文件夹路径/模式(支持多个)
112
309
 
113
310
  **选项:**
311
+
114
312
  - `-f, --force` - 强制删除,不提示确认
115
313
  - `-n, --dry-run` - 预览模式,仅显示将要删除的内容
116
314
  - `-v, --verbose` - 详细输出模式
117
315
  - `-d, --use-defaults` - 使用配置文件中的默认模式
118
316
 
119
317
  **退出码:**
318
+
120
319
  - `0` - 成功
121
320
  - `1` - 失败或有错误发生
122
321
 
123
- ## 🔧 开发
322
+ ## 🧪 开发
124
323
 
125
324
  ### 环境要求
126
325
 
@@ -192,16 +391,13 @@ bun test --coverage
192
391
  ```
193
392
 
194
393
  测试覆盖以下场景:
394
+
195
395
  - ✅ 基础删除功能(单文件、多文件、文件夹)
196
396
  - ✅ 预览模式(dry-run)
197
397
  - ✅ 强制删除模式
198
398
  - ✅ 错误处理
199
399
  - ✅ 复杂场景(嵌套目录、特殊字符文件名)
200
400
 
201
- ## 📝 配置
202
-
203
- 可以通过配置文件自定义默认行为(配置功能开发中)。
204
-
205
401
  ## 🤝 贡献
206
402
 
207
403
  欢迎提交 Issue 和 Pull Request!