溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

怎么制作CLI可能用到的輪子

發(fā)布時(shí)間:2022-02-28 09:56:31 來(lái)源:億速云 閱讀:148 作者:小新 欄目:web開(kāi)發(fā)

小編給大家分享一下怎么制作CLI可能用到的輪子,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

開(kāi)始之前先要了解npm的bin用法。

 "bin": {

   "init": "index.js"

 }

執(zhí)行npm install -g就在全局安裝了init命令,在CMD里就可以執(zhí)行init。

執(zhí)行之后,由于在我本機(jī)目前默認(rèn)是由VS Code打開(kāi)JavaScript文件,所以效果并不是執(zhí)行代碼(這個(gè)問(wèn)題下文有繼續(xù),千萬(wàn)別走開(kāi),有個(gè)坑)。從上面日志打印可以看出,實(shí)際上Node.js相當(dāng)于建立了一個(gè)快捷方式,init指向安裝到全局模塊的該工程的index.js,而init是被加入了到環(huán)境變量PATH可以直接執(zhí)行。

也可以使用npm link直接將index.js鏈接到PATH里,但先要npm uninstall -g卸載一下,否則會(huì)報(bào)重復(fù)了的錯(cuò)誤。

現(xiàn)在正式開(kāi)始觀(guān)賞輪子,以下排名不分先后。

command.js

command.js可以和剛才bin生成的全局命令一起配合使用,有一個(gè)優(yōu)勢(shì)是它居然還有中文文檔,雖然E文對(duì)我來(lái)說(shuō)不是難事,但是中文的還是讀起來(lái)快多了。

 const { program } = require("commander");

 program

   .version("0.0.1")

   .arguments("<file>")

   .description('Login Module')

   .option("-u, --username <username>", "The user to authenticate as")

   .option("-p, --password <password>", "The user's password")

   .action(function (file) {

     console.log(program.opts());

     console.log(file);

   })

   .parse(process.argv);

一開(kāi)始使用全局命令不能接受參數(shù)而直接使用Node.js執(zhí)行是可以的。

后來(lái)找了下,原來(lái)主入口文件開(kāi)頭的#! /usr/bin/env node是必須的,加入后變?yōu)?/p>

 #! /usr/bin/env node 

 const { program } = require("commander");

 program

   .version("0.0.1")

   .arguments("<file>")

   .description("Login Module")

   .option("-u, --username <username>", "The user to authenticate as")

   .option("-p, --password <password>", "The user's password")

   .action(function (file) {

     console.log(program.opts());

     console.log(file);

   })

   .parse(process.argv);

再次執(zhí)行(有可能需要重新npm [un]install -g或者npm [un]link),這次OK了

arguments里帶<>的參數(shù)表示是必須的,如果缺失,就不能繼續(xù)進(jìn)行。

參數(shù)里要定義必填項(xiàng)使用。requiredOption,比如program.requiredOption('-c, --cheese <type>', 'pizza must have cheese');。

commander.js根據(jù)參數(shù)也自動(dòng)幫你生成了幫助命令init --help

更詳細(xì)的用法請(qǐng)參考官方文檔。

svg-term-cli

svg-term-cli用來(lái)生成ascii碼動(dòng)畫(huà)的SVG文件。它需要全局安裝

 npm install -g svg-term-cli

現(xiàn)在從https://asciinema.org/a/113643上生成SVG動(dòng)圖

 svg-term --cast 113643 --out examples/parrot.svg --window --no-cursor --from=4500

結(jié)束后會(huì)在examples下生成一個(gè)parrot.svg的文件,打開(kāi)這個(gè)文件看看,太浪了

progress

progress用來(lái)生成一個(gè)等待進(jìn)度條。

 var ProgressBar = require("progress");

 var bar = new ProgressBar(":bar", { total: 40 });

 var timer = setInterval(function () {

   bar.tick();

   if (bar.complete) {

     console.log("\ncomplete\n");

     clearInterval(timer);

   }

 }, 1000);

生成如下的進(jìn)度條

我們常見(jiàn)的下載進(jìn)度展示,就可以用它來(lái)實(shí)現(xiàn)

ora

對(duì)于不確定的進(jìn)度情況,就可以使用ora了。它就是那種愛(ài)的魔力轉(zhuǎn)圈圈的樣式。

 const ora = require("ora");

 const spinner = ora("Loading unicorns")。start();

 setTimeout(() => {

   spinner.color = "yellow";

   spinner.text = "Loading rainbows";

 }, 1000);

 setTimeout(() => {

   spinner.fail();

 }, 3000);

以上是“怎么制作CLI可能用到的輪子”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

cli
AI