利用 JavaScript 構(gòu)建命令行應(yīng)用
前言:
JavaScript 是一種為 Web 開(kāi)發(fā)的語(yǔ)言,但它的用處已經(jīng)遠(yuǎn)遠(yuǎn)超出了互聯(lián)網(wǎng)的范疇。由于 Node.js 和 Electron 這樣的項(xiàng)目,JavaScript 既是一種通用的腳本語(yǔ)言,也是一種瀏覽器組件。有專(zhuān)門(mén)設(shè)計(jì)的 JavaScript 庫(kù)來(lái)構(gòu)建命令行界面。是的,你可以在你的終端中運(yùn)行 JavaScript。
現(xiàn)在,當(dāng)你在終端中輸入一個(gè)命令時(shí),一般都有 選項(xiàng) ,也叫 開(kāi)關(guān) 或 標(biāo)志 ,你可以用來(lái)修改命令的運(yùn)行方式。這是由 POSIX 規(guī)范 定義的一個(gè)有用的慣例,所以作為一個(gè)程序員,知道如何檢測(cè)和解析這些選項(xiàng)是很有幫助的。要從 JavaScript 獲得此功能,使用旨在簡(jiǎn)化構(gòu)建命令行界面的庫(kù)很有用。我最喜歡的是 Commander.js 。它很簡(jiǎn)單,很靈活,而且很直觀。
1、安裝 node
要使用 Commander.js 庫(kù),你必須安裝 Node.js 。在 Linux 上,你可以用你的包管理器安裝 Node。例如,在 Fedora、CentOS、Mageia 和其他系統(tǒng)上:
$ sudo dnf install nodejs
在 Windows 和 macOS 上,我們可以 從nodejs.org 網(wǎng)站下載安裝程序 。
2、安裝 Commander.js
要安裝 Commander.js,請(qǐng)使用 npm 命令:
$ npm install commander
3、 JavaScript 代碼中添加一個(gè)庫(kù)
在 JavaScript 中,你可以使用 require 關(guān)鍵字在你的代碼中包含(或者導(dǎo)入,如果你習(xí)慣于 Python)一個(gè)庫(kù)。創(chuàng)建一個(gè)名為 example.js 的文件,并在你喜歡的文本編輯器中打開(kāi)它。在頂部添加這一行,以包括 Commander.js 庫(kù):
const { program } = require('commander');
4、JavaScript 中的選項(xiàng)解析
要解析選項(xiàng),你必須做的第一件事是定義你的應(yīng)用可以接受的有效選項(xiàng)。Commander.js 庫(kù)可以讓你定義短選項(xiàng)和長(zhǎng)選項(xiàng),同時(shí)還有一個(gè)有用的信息來(lái)澄清每個(gè)選項(xiàng)的目的。
program
.description('A sample application to parse options')
.option('-a, --alpha', 'Alpha')
.option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');
第一個(gè)選項(xiàng),我稱(chēng)之為 --alpha (簡(jiǎn)寫(xiě) -a ),是一個(gè)布爾型開(kāi)關(guān):它要么存在,要么不存在。它不需要任何參數(shù)。第二個(gè)選項(xiàng),我稱(chēng)之為 --beta (簡(jiǎn)寫(xiě) -b ),接受一個(gè)參數(shù),甚至在你沒(méi)有提供任何參數(shù)的情況下指定一個(gè)默認(rèn)值。
5、訪(fǎng)問(wèn)命令行數(shù)據(jù)
當(dāng)你定義了有效的選項(xiàng),你就可以使用長(zhǎng)的選項(xiàng)名稱(chēng)來(lái)引用這些值:
program.parse();
const options = program.opts();
console.log('Options detected:');
if (options.alpha) console.log('alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log('beta is: %s', beta);
6、運(yùn)行應(yīng)用
試著用 node 命令來(lái)運(yùn)行它,首先不使用選項(xiàng):
$ node ./example.js Options detected: beta is: Foo
在用戶(hù)沒(méi)有覆蓋的情況下, beta 的默認(rèn)值被使用。
再次運(yùn)行它,這次使用選項(xiàng):
$ node ./example.js --beta hello --alpha Options detected: alpha beta is: hello
這次,測(cè)試腳本成功檢測(cè)到了選項(xiàng) --alpha ,以及用戶(hù)提供的 --beta 選項(xiàng)的值。
7、選項(xiàng)解析
下面是完整的演示代碼供你參考:
const { program } = require('commander');
program
.description('A sample application to parse options')
.option('-a, --alpha', 'Alpha')
.option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');
program.parse();
const options = program.opts();
console.log('Options detected:');
console.log(typeof options);
if (options.alpha) console.log(' * alpha');
const beta = !options.beta ? 'no' : options.beta;
console.log(' * beta is: %s', beta);
在該項(xiàng)目的 Git 倉(cāng)庫(kù) 中還有更多例子。
對(duì)任何應(yīng)用來(lái)說(shuō),包括用戶(hù)的選項(xiàng)都是一個(gè)重要的功能,而 Commander.js 使它很容易做到。除了 Commander.js,還有其他庫(kù),但我覺(jué)得這個(gè)庫(kù)使用起來(lái)很方便快捷。你最喜歡的 JavaScript 命令行構(gòu)建器是什么?
到此這篇關(guān)于利用 JavaScript 構(gòu)建命令行應(yīng)用的文章就介紹到這了,更多相關(guān) JavaScript 構(gòu)建命令行應(yīng)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
lodash內(nèi)部方法getData和setData實(shí)例解析
本篇章我們將了解lodash里內(nèi)部關(guān)于Data的操作方法,重點(diǎn)關(guān)注getData、setData兩個(gè)內(nèi)部方法,同時(shí)由實(shí)現(xiàn)上引申其他內(nèi)部封裝的方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-08-08
詳解JavaScript實(shí)現(xiàn)簡(jiǎn)單的詞法分析器示例
這篇文章主要為大家介紹了詳解JavaScript實(shí)現(xiàn)簡(jiǎn)單的詞法分析器示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03
Fabric.js 實(shí)現(xiàn)變換視窗示例詳解
這篇文章主要為大家介紹了Fabric.js 實(shí)現(xiàn)變換視窗示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
競(jìng)態(tài)條件Race condition及如何避免的三種方案詳解
這篇文章主要為大家介紹了競(jìng)態(tài)條件Race condition及如何避免的三種方案詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
如何編寫(xiě)高質(zhì)量 JavaScript 代碼
如果要編寫(xiě)出高質(zhì)量的 JavaScript 代碼,可以從以下三個(gè)方面去考慮。分別是:易閱讀的代碼、高性能的代碼、健壯性的代碼。下面我將分別對(duì)這三個(gè)方面進(jìn)行闡述。需要的朋友可以參考一下2021-09-09
JS算法題解數(shù)組刪除重復(fù)項(xiàng)方法示例
這篇文章主要為大家介紹了JS算法題解數(shù)組刪除重復(fù)項(xiàng)方法示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-07-07

