我如何用 JavaScript 构建命令行应用

为用户提供选项是任何应用程序的重要功能,Commander.js 使其变得容易。你最喜欢的 JavaScript 命令行构建器是什么?参与我们的投票。
53 位读者喜欢这篇文章。
Javascript code close-up with neon graphic overlay

Jen Wike Huger 拍摄

JavaScript 是一种为 Web 开发的语言,但它的用途已经远远超出互联网。由于 Node.js 和 Electron 等项目,JavaScript 既是一种通用脚本语言,也是一个浏览器组件。有一些专门为构建命令行界面而设计的 JavaScript 库。是的,你可以在终端中运行 JavaScript。

现在,当你在终端中输入命令时,通常会有 选项,也称为开关标志,你可以使用它们来修改命令的运行方式。这是 POSIX 规范 定义的有用约定,因此作为程序员,了解如何检测和解析选项很有帮助。为了从 JavaScript 中获得此功能,使用旨在简化构建命令行界面的库很有用。我最喜欢的是 Commander.js。它简单、灵活且直观。

安装 Node.js

要使用 Commander.js 库,你必须安装 Node.js。在 Linux 上,你可以使用你的包管理器安装 Node.js。例如,在 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 --alpha
Options detected: 
alpha
beta 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 命令行构建器是什么?

接下来阅读
Seth Kenlon
Seth Kenlon 是一位 UNIX 爱好者、自由文化倡导者、独立多媒体艺术家和 D&D 爱好者。他曾在电影和计算机行业工作,通常同时进行。
Ramakrishna Pattnaik
Ramakrishna Pattnaik 是一位来自布巴内斯瓦尔的 Web 开发人员,目前在班加罗尔的红帽中间件团队担任副软件工程师。一位开源爱好者和贡献者。热爱小说。

评论已关闭。

Creative Commons License本作品根据知识共享署名-相同方式共享 4.0 国际许可协议获得许可。
© . All rights reserved.