天天看點

用 JavaScript 建構指令行應用

JavaScript 是一種為 Web 開發的語言,但它的用處已經遠遠超出了網際網路的範疇。由于 Node.js 和 Electron 這樣的項目,JavaScript 既是一種通用的腳本語言,也是一種浏覽器元件。有專門設計的 JavaScript 庫來建構指令行界面。是的,你可以在你的終端中運作 JavaScript。

安裝 node

要使用 Commander.js 庫,你必須安裝 Node.js。在 Linux 上,你可以用你的包管理器安裝 Node。例如,在 Fedora、CentOS、Mageia 和其他系統上:

$ sudo dnf install nodejs           

複制

在 Windows 和 macOS 上,你可以 從 nodejs.org 網站下載下傳安裝程式。

安裝 Commander.js

要安裝 Commander.js,請使用 

npm

 指令:

$ npm install commander           

複制

在你的 JavaScript 代碼中添加一個庫

在 JavaScript 中,你可以使用 

require

 關鍵字在你的代碼中包含(或者導入,如果你習慣于 Python)一個庫。建立一個名為 

example.js

 的檔案,并在你喜歡的文本編輯器中打開它。在頂部添加這一行,以包括 Commander.js 庫:

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

複制

JavaScript 中的選項解析

要解析選項,你必須做的第一件事是定義你的應用可以接受的有效選項。Commander.js 庫可以讓你定義短選項和長選項,同時還有一個有用的資訊來澄清每個選項的目的。

program  .description('A sample application to parse options')  .option('-a, --alpha', 'Alpha')  .option('-b, --beta <VALUE>', 'Specify a VALUE', 'Foo');           

複制

第一個選項,我稱之為 

--alpha

(簡寫 

-a

),是一個布爾型開關:它要麼存在,要麼不存在。它不需要任何參數。第二個選項,我稱之為 

--beta

(簡寫 

-b

),接受一個參數,甚至在你沒有提供任何參數的情況下指定一個預設值。

通路指令行資料

當你定義了有效的選項,你就可以使用長的選項名稱來引用這些值:

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);           

複制

運作應用

試着用 

node

 指令來運作它,首先不使用選項:

$ node ./example.js Options detected: beta is: Foo           

複制

在使用者沒有覆寫的情況下,

beta

 的預設值被使用。

再次運作它,這次使用選項:

$ node ./example.js --beta hello --alphaOptions detected: alphabeta is: hello           

複制

這次,測試腳本成功檢測到了選項 

--alpha

,以及使用者提供的 

--beta

 選項的值。

選項解析

下面是完整的示範代碼供你參考:

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);           

複制

在該項目的 Git 倉庫 中還有更多例子。

對任何應用來說,包括使用者的選項都是一個重要的功能,而 Commander.js 使它很容易做到。除了 Commander.js,還有其他庫,但我覺得這個庫使用起來很友善快捷。你最喜歡的 JavaScript 指令行建構器是什麼?