利用 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 相关文章推荐
wap手机图片滑动切换特效无css3元素js脚本编写
Jul 28 Javascript
基于javascript实现精确到毫秒的倒计时限时抢购
Apr 17 Javascript
js删除Array数组中指定元素的两种方法
Aug 03 Javascript
14 个折磨人的 JavaScript 面试题
Aug 08 Javascript
js隐式转换的知识实例讲解
Sep 28 Javascript
微信小程序自定义toast的实现代码
Nov 16 Javascript
如何让node运行es6模块文件及其原理详解
Dec 11 Javascript
详解jenkins自动化部署vue
May 14 Javascript
JavaScript 扩展运算符用法实例小结【基于ES6】
Jun 17 Javascript
JS中的算法与数据结构之列表(List)实例详解
Aug 16 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 Javascript
JS+JQuery实现无缝连接轮播图
Dec 30 jQuery
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
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
php获取目录所有文件并将结果保存到数组(实例)
2013/10/25 PHP
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
CI框架中site_url()和base_url()的区别
2015/01/07 PHP
Laravel 之url参数,获取路由参数的例子
2019/10/21 PHP
jquery写个checkbox——类似邮箱全选功能
2013/03/19 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
javascript实现在线客服效果
2015/07/15 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
vue-cli4项目开启eslint保存时自动格式问题
2020/07/13 Javascript
JS性能优化实现方法及优点进行
2020/08/30 Javascript
elementui实现预览图片组件二次封装
2020/12/29 Javascript
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Flask框架的学习指南之用户登录管理
2016/11/20 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
python使用tornado实现简单爬虫
2018/07/28 Python
python微信好友数据分析详解
2018/11/19 Python
python_opencv用线段画封闭矩形的实例
2018/12/05 Python
如何不用安装python就能在.NET里调用Python库
2019/07/12 Python
Python实现中值滤波去噪方式
2019/12/18 Python
Django QuerySet查询集原理及代码实例
2020/06/13 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
Python+kivy BoxLayout布局示例代码详解
2020/12/28 Python
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
网络方面基础面试题
2012/11/16 面试题
What's the difference between an interface and abstract class? (接口与抽象类有什么区别)
2012/10/29 面试题
应届专科生个人的自我评价
2014/01/05 职场文书
总经理助理职责
2014/02/04 职场文书
学校志愿者活动总结
2014/06/27 职场文书
乡党委干部党的群众路线教育实践活动个人对照检查材料思想汇报
2014/10/01 职场文书
请客吃饭开场白
2015/06/01 职场文书
2016年小学中秋节活动总结
2016/04/05 职场文书
Sleuth+logback 设置traceid 及自定义信息方式
2021/07/26 Java/Android