Skip to content

Commit a21b9a8

Browse files
committed
feat( Creator): 添加项目文件生成实时反馈
- 在项目文件生成过程中添加了实时反馈功能,每当写入一个文件时,在终端中显示 - 引入了 `setTimeout` 函数,用于控制反馈信息的显示速度 - 在 `create` 方法中添加了 `onWritten` 函数,用于处理文件写入后的操作 - 通过 `this.on('written', onWritten)` 和 `this.off('written', onWritten)` 管理事件监听 - 更新了 `spinner.stop` 的提示信息,显示生成的文件数量
1 parent f4bb3a2 commit a21b9a8

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

src/Creator.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import fs from 'node:fs';
22
import path from 'node:path/posix';
33
import process from 'node:process';
4+
import { setTimeout } from 'node:timers/promises';
45
import ejs from 'ejs';
56
import fse from 'fs-extra';
67
import { glob } from 'glob';
@@ -120,15 +121,23 @@ export class Creator<T extends Record<string, unknown>> extends TypedEvents<{
120121
}
121122

122123
const spinner = prompts.spinner();
124+
let files = 0;
123125
spinner.start('Generating project files ...');
126+
const onWritten = async (fileMeta: FileMeta) => {
127+
files++;
128+
spinner.message(`${colors.gray('+')} ${colors.green(fileMeta.targetPath)}`);
129+
await setTimeout(Math.random() * 100);
130+
};
131+
this.on('written', onWritten);
124132
const [err] = await tryFlatten(this.#generateWriteFiles(paths));
133+
this.off('written', onWritten);
125134

126135
if (err) {
127136
spinner.stop('Failed to generate project files', 1);
128137
throw new ExitError(err.message, 1);
129138
}
130139

131-
spinner.stop('Generated project files', 0);
140+
spinner.stop(`Generated project ${files} files`, 0);
132141
}
133142

134143
async #generateWriteFiles(paths: string[]) {

0 commit comments

Comments
 (0)