listr2 是一个易于使用的 Node.js 包,可以用来创建生动的、可以交互的 CLI 界面、任务列表。类似的库还有consola。
贴一个官方的示例图,来便于理解:
我们可以利用这个库实现自己的 CLI 、管理任务、优化控制台显示等。
快速上手
安装
pnpm add listr2
简单使用
import { Listr } from "listr2";
const tasks = new Listr([
{
title: "任务1 立即执行完成",
task: () => {
console.log("执行任务1");
},
},
{
title: "任务2 等待3s后才执行完成",
task: () =>
new Promise<void>(resolve => {
setTimeout(() => {
console.log("执行任务2");
resolve();
}, 3000);
}),
},
{
title: "任务3 等待3s后才执行失败",
task: () =>
new Promise<void>((resolve, reject) => {
setTimeout(() => {
console.log("执行任务3");
reject();
}, 3000);
}),
},
]);
tasks
.run()
.then()
.catch(err => {});
运行效果
以这个例子, 一个任务最关键的两个元素是title
和task
,title
是一个任务的标题,每个任务标题单独占据一行,task
是一个函数,包含要执行的代码。
当task
为一个普通函数时,则执行完,任务直接被标记为成功状态。
task
允许Promise
类型的返回值。在返回的Promise实例在pending状态下,换句话说,在调用resolve或reject之前,任务一直为执行状态。调用resolve,任务的执行结果为成功,调用reject,则任务的执行结果为失败。
更高级的用法,我将在下一篇进行介绍。