您好,登錄后才能下訂單哦!
小編給大家分享一下怎么制作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è)資訊頻道!
免責(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)容。