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 指令行建構器是什麼?