@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 +202 -6
- package/dist/index.d.ts +963 -1
- package/dist/index.js +110 -67
- package/dist/index.js.map +1 -1
- package/package.json +62 -60
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!
|