不知道该问题的标题是什么,但我会尽力在问题的其余部分中传达。
我正在开发一个 CLI,它首先提示用户几个问题,然后根据答案克隆一个存储库。
例子:
Frontend Framework:
[x] Vue
[ ] React
⠋ Cloning Vue repository...
我正在使用Ora来显示微调器。
问题是微调器在启动之前就冻结了。我正在使用的其他包是 Inquirer、Shelljs、Chalk 和 Commander.js for CLI。
CLI
.command("Frontend")
.alias("F")
.description("Frontend Framework")
.action(() => {
inquirer.prompt(Questions).then((Answers) => {
const Spinner = new Ora({
text: `${chalk.bold(chalk.blue('Cloning Git Repository...'))}`,
discardStdin: false
}).start()
if (Answers.Framework === 'Vue') {
cloneRepo(Answers.Dir, "git@github.com:Vue/Vuejs.git")
} else if (Answers.Framework === 'React') {
cloneRepo(Answers.Dir, "git@github.com:facebook/reactjs.git")
}
Spinner.stopAndPersist({
symbol: "✨",
text: `${chalk.bold(chalk.green('Git repository cloned'))}`
})
})
})
问题数组
const Questions = [
{
type: "list",
name: "Framework",
message: "Which frontend framework would you like to use?",
default: "Vue",
choices: [
'Vue',
'React',
]
},
]
克隆功能:
const cloneRepo = (Dir, Repo) => {
if (shell.exec(`cd ${Dir} && git clone ${Repo} -q .`).code !== 0) {
shell.echo('Error: Git clone failed')
shell.exit(1)
}
}
我试过Spinnies,但问题是一样的,它冻结了,一旦过程完成,它就会显示成功消息。我尝试了几种可能性,但不知道如何使用 Async 解决。
其他包: - Inquirer.js - Commander.js - Shelljs
任何帮助将不胜感激。