首先,通过 readline.createInterface 方法创建一个 interface 类 ,这个类下面有一个方法 .question ,用这个方法在命令行上抛出一个问题,在第二个参数传入一个函数进行监听。一旦用户输入完毕敲下回车,就会触发回调函数。
然后我们在回调函数里面写了个计时器,假装我们在处理某些事务。
使用 readline.cursorTo 这个方法,可以改变命令行上的光标的位置。
readline.cursorTo(process.stdout, 0, 0); 是移动到第1列第1行上,
readline.cursorTo(process.stdout, 0, 1); 是移动到第1列第2行上。
使用 readline.clearScreenDown 这个方法,是让命令行从当前行开始,到最后一行结束,将这两行之间所有内容清除。
renderProgress 是自己封装的一个方法,通过 process.stdout.write 方法输出一行看起来像是进度条的字符串到命令行上。
所以在计时器里面,当计数小于10的时候,我们让光标移到第一行上,然后清除所有输出,输出进度条字符串;当计数大于10的时候,我们关掉计时器,清除输出,打印结果。
最后不要忘记关掉进程,可以使用 interface 这个类的 .close 方法关掉readline进程,也可以直接调用 process.exit 退出。
绘制的思路跟canvas绘制动画一样,只不过canvas是清除画布,而命令行这里是通过 readline.clearScreenDown 清除输出。
这样,一个简易的,人性化的,带点点进度条动画的命令行cli工具就写好了,你也可以发挥你的想象力,去写一些更有趣的效果出来。
毕竟我们前端,有浏览器我们可以写动画,没了浏览器我们一样可以写动画。