利用 JavaScript 构建命令行应用


Posted in Javascript onNovember 17, 2021

前言:

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

现在,当你在终端中输入一个命令时,一般都有 选项 ,也叫  开关 或  标志 ,你可以用来修改命令的运行方式。这是由  POSIX 规范 定义的一个有用的惯例,所以作为一个程序员,知道如何检测和解析这些选项是很有帮助的。要从 JavaScript 获得此功能,使用旨在简化构建命令行界面的库很有用。我最喜欢的是  Commander.js 。它很简单,很灵活,而且很直观。

1、安装 node

要使用 Commander.js 库,你必须安装 Node.js 。在 Linux 上,你可以用你的包管理器安装 Node。例如,在 FedoraCentOSMageia 和其他系统上:

$ sudo dnf install nodejs

Windows macOS 上,我们可以 从nodejs.org 网站下载安装程序 。

2、安装 Commander.js

要安装 Commander.js,请使用 npm 命令:

$ npm install commander

3、 JavaScript 代码中添加一个库

JavaScript 中,你可以使用 require 关键字在你的代码中包含(或者导入,如果你习惯于 Python)一个库。创建一个名为  example.js 的文件,并在你喜欢的文本编辑器中打开它。在顶部添加这一行,以包括 Commander.js 库:

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

4、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 ),接受一个参数,甚至在你没有提供任何参数的情况下指定一个默认值。

5、访问命令行数据

当你定义了有效的选项,你就可以使用长的选项名称来引用这些值:

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、运行应用

试着用 node 命令来运行它,首先不使用选项:

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

在用户没有覆盖的情况下, beta 的默认值被使用。

再次运行它,这次使用选项:

$ node ./example.js --beta hello --alpha
Options detected: 
alpha
beta is: hello

这次,测试脚本成功检测到了选项 --alpha ,以及用户提供的  --beta 选项的值。

7、选项解析

下面是完整的演示代码供你参考:

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 命令行构建器是什么?

到此这篇关于利用 JavaScript 构建命令行应用的文章就介绍到这了,更多相关 JavaScript 构建命令行应用内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
基于jquery实现漂亮的动态信息提示效果
Aug 02 Javascript
js实现图片漂浮效果的方法
Mar 02 Javascript
实现前后端数据交互方法汇总
Apr 07 Javascript
解决jQuery ajax请求在IE6中莫名中断的问题
Jun 20 Javascript
瀑布流的实现方式(原生js+jquery+css3)
Jun 28 Javascript
Three.js学习之正交投影照相机
Aug 01 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
JavaScript省市区三级联动菜单效果
Sep 21 Javascript
JavaScript实现二叉树定义、遍历及查找的方法详解
Dec 20 Javascript
JS实现水平遍历和嵌套递归操作示例
Aug 15 Javascript
Layui实现主窗口和Iframe层参数传递
Nov 14 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
Ajax实现异步加载数据
Nov 17 #Javascript
36个正则表达式(开发效率提高80%)
Nov 17 #Javascript
Javascript 解构赋值详情
Nov 17 #Javascript
javascript Number 与 Math对象的介绍
Nov 17 #Javascript
javascript条件式访问属性和箭头函数介绍
Nov 17 #Javascript
JavaScript 对象创建的3种方法
Nov 17 #Javascript
JavaScript 中for/of,for/in 的详细介绍
Nov 17 #Javascript
You might like
用函数读出数据表内容放入二维数组
2006/10/09 PHP
centos下file_put_contents()无法写入文件的原因及解决方法
2017/04/01 PHP
JavaScript 基于原型的对象(创建、调用)
2009/10/16 Javascript
XENON基于JSON变种
2010/07/27 Javascript
js实现网站首页图片滚动显示
2013/02/04 Javascript
深入理解JavaScript是如何实现继承的
2013/12/12 Javascript
JavaScript实现简单的二级导航菜单实例
2015/04/15 Javascript
浅谈JavaScript中小数和大整数的精度丢失
2016/05/31 Javascript
jquery动态遍历Json对象的属性和值的方法
2016/07/27 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
Node.js Stream ondata触发时机与顺序的探索
2019/03/08 Javascript
原生JS使用Canvas实现拖拽式绘图功能
2019/06/05 Javascript
详解微信小程序中var、let、const用法与区别
2020/01/11 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
2020/07/20 Javascript
[06:57]DOTA2-DPC中国联赛 正赛 Ehome vs PSG.LGD 选手采访
2021/03/11 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
python 自动化将markdown文件转成html文件的方法
2016/09/23 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
详解python实现交叉验证法与留出法
2019/07/11 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python tkinter 设置窗口大小不可缩放实例
2020/03/04 Python
基于Python实现视频的人脸融合功能
2020/06/12 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
python爬取音频下载的示例代码
2020/10/19 Python
调用HTML5的Canvas API绘制图形的快速入门指南
2016/06/17 HTML / CSS
医学生自我鉴定范文
2013/11/08 职场文书
开业庆典邀请函
2014/01/08 职场文书
打架检讨书2000字
2014/02/22 职场文书
减负增效提质方案
2014/05/23 职场文书
井冈山红色之旅心得体会
2014/10/07 职场文书
吃空饷专项整治方案
2014/10/27 职场文书
婚礼庆典答谢词
2015/01/20 职场文书
数学备课组工作总结
2015/08/12 职场文书
上帝为你开了一扇窗之Tkinter常用函数详解
2021/06/02 Python
JavaScript中MutationObServer监听DOM元素详情
2021/11/27 Javascript
Win10服务全部禁用了怎么启动?Win10服务全部禁用解决方法
2022/09/23 数码科技