我正在使用 Yargs 构建一个交互式 CLI,它从标准输入获取命令并在发生错误时继续执行。从官方文档中,我发现yargs.parse可以提供我需要的功能。然而,尽管进程确实会继续出错,但它会不受控制地打印错误调用堆栈;此外,即使用户稍后给出了正确的命令,仍然会打印之前的所有错误调用堆栈,这肯定会混淆和误导用户。根据格式,我想这是抛出未捕获错误时的自动行为,所以我的问题是:我应该在哪里以及如何捕获这些错误?显然中提供的回调函数yargs.parse不是引发错误的范围。
这是一个演示片段
import Yargs = require("yargs");
import Reader = require("readline-sync");
import Chalk = require("chalk");
while (true) {
try {
Yargs.strict().help()
.command({
command: "exit",
describe: "Exit the program",
handler: _ => {
try {
console.log(Chalk.greenBright("exiting"));
process.exit();
}
catch (error) {
console.log(Chalk.yellowBright("caught"));
}
}
})
.parse(Reader.question(Chalk.yellowBright("> ")), null, (error, argv, output) => {
console.log(Chalk.redBright("callback"));
});
}
catch (error) {
console.log(Chalk.yellowBright("caught"));
}
}
正如你所看到的,我已经尝试将整个语句和命令处理程序放在一个 try-catch 块中,但是,错误仍然没有被捕获。