🌀
Deno で CLI ローディング インディケーターを作って公開した
こちらができたものです 🍳
使用したイメージ
loading...
とfinish!
の部分の文字列は任意のものに設定可能です
使い方
import {
loading,
clearLoading,
} from "https://deno.land/x/loading_spinner@v1.0.2/mod.ts";
const loadingId = loading("loading...");
await new Promise<void>((res, _rej) => {
setTimeout(() => res(), 3000);
});
clearLoading(loadingId, "finish!!!");
技術的なトピック
「Terminal
などで一度出力した文字列を変更したり、消したり
画面全体の文字を消したりするのってどうやるんだろう?」
と、思いながら調査をしてたのですが
ANSI escape sequence
(以下、ansi
)というのを使えば、結構手軽にコンソールアプリの画面をいじることができました
以下は、参考にしたチートシートです
今後も、CLI実装する際にはお世話になりそうです。
ただ、実装されているansi
もまちまちだと思うので、使えるansi
とそうでないものがあると思います。
ご自身で使われているコンソールアプリとご相談ください
今回の動機
Denoは何よりTSを設定なしにバニラで使えちゃうのがとても気持ちが良いです。
外部ライブラリを管理するパッケージマネージャーがなくて、
URLから直接インポートする方式も好きです。
愛着が湧いてます。
DenoでCLIを書いている時、重い処理や通信処理が走るときなどに、その状態がCLIだと知るよしがないので
「ローディングのアレ」 を作りたいなと思いました。
github などにフィードバック等もらえると嬉しいです😊
Discussion