0

我正在使用 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 块中,但是,错误仍然没有被捕获。
演示图片

4

0 回答 0