ora
- ora 它主要做的一件事情啊,就是去在命令行当中去输出loading的状态
- loading在web中容易实现,但是在终端中实现起来是非常复杂的
- 安装 $
npm i -S ora
- 可以看到其源码与chalk不同的是, 有很多第三方依赖库
1 )基础用法
import ora from 'ora';
const spinner = ora('Loading').start(); // loading 开启
spinner.color = 'red';
spinner.prefixText = 'Downloading ora: ' // 加入前缀
let percent = 0;
const inTime = setInterval(() => {
percent += 10;
spinner.text = `Loading ${percent}%`;
if (percent == 100) {
spinner.stop();
spinner.succeed('Download finished!')
clearInterval(inTime)
}
}, 300)
- 从上述交互细节可以看出
- 在 stop 之前,Loading 都会独立占用整行终端空间
- 在 stop 之后,独占的一行会被清空
- 在 ora 这个库中,还有一个个比较亮眼的功能,就是它提供一个promise方法
- 有一个
oraPromise
,我们通过这个方法,可以针对异步任务 - 当异步任务完成的时候, 结束这个loading
2 )高级用法
import ora, { oraPromise } from 'ora';
(async () => {
const promise = new Promise((resolve) => {
const timer = setTimeout(() => {
clearTimeout(timer);
resolve();
}, 3000)
})
await oraPromise(promise, {
successText: 'success!',
failText: 'failed!',
prefixText: 'Download ora',
text: 'loading',
spinner: {
interval: 80,
frames: ['-', '\\', '|', '/', '-'] // 这种切换,是在 里面几个字符之间做动画,替换默认的loading图标
}
});
})()
- 在promise当中去使用的时候,它有一个好处就是你不再需要去关注loading的开始和结束
- 只要关注你的promise任务就可以了,它是一个异步任务