利用 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的Tooltip插件 qtip使用详细说明
Sep 08 Javascript
关闭浏览器时提示onbeforeunload事件
Dec 25 Javascript
3种Jquery限制文本框只能输入数字字母的方法
Dec 03 Javascript
Jquery使用val方法读写value值
May 18 Javascript
第七篇Bootstrap表单布局实例代码详解(三种表单布局)
Jun 21 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
Jul 11 Javascript
jquery实现下拉菜单的手风琴效果
Jul 23 jQuery
Fundebug支持监控微信小程序HTTP请求错误的方法
Feb 21 Javascript
Element PageHeader页头的使用方法
Jul 26 Javascript
原生JavaScript实现换肤
Feb 19 Javascript
使用JS实现简易计算器
Jun 14 Javascript
原生JavaScript实现简单五子棋游戏
Jun 28 Javascript
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获取当前页面完整URL的实现代码
2013/06/10 PHP
ThinkPHP3.1新特性之字段合法性检测详解
2014/06/19 PHP
ThinkPHP自动填充实现无限级分类的方法
2014/08/22 PHP
php实现三级级联下拉框
2016/04/17 PHP
CI框架AR操作(数组形式)实现插入多条sql数据的方法
2016/05/18 PHP
Laravel中9个不经常用的小技巧汇总
2019/04/16 PHP
Javascript 不能释放内存.
2006/09/07 Javascript
javascript入门·动态的时钟,显示完整的一些方法,新年倒计时
2007/10/01 Javascript
jquery异步调用页面后台方法&amp;#8207;(asp.net)
2011/03/01 Javascript
javascript制作的网页侧边弹出框思路及实现代码
2014/05/21 Javascript
jQuery中:text选择器用法实例
2015/01/03 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
javascript学习笔记整理(概述、变量、数据类型简介)
2015/10/25 Javascript
jQuery实现的购物车物品数量加减功能代码
2016/11/16 Javascript
Angular下H5上传图片的方法(可多张上传)
2017/01/09 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
.net MVC+Bootstrap下使用localResizeIMG上传图片
2017/04/21 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
关于express与koa的使用对比详解
2018/01/25 Javascript
深入理解JavaScript 中的执行上下文和执行栈
2018/10/23 Javascript
Node.js 获取微信JS-SDK CONFIG的方法示例
2019/05/21 Javascript
vue+koa2实现session、token登陆状态验证的示例
2019/08/30 Javascript
Vue脚手架编写试卷页面功能
2020/03/17 Javascript
[02:55]2018DOTA2国际邀请赛勇士令状不朽珍藏Ⅲ饰品一览
2018/08/01 DOTA
Python找出文件中使用率最高的汉字实例详解
2015/06/03 Python
python使用str &amp; repr转换字符串
2016/10/13 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
python如何从文件读取数据及解析
2019/09/19 Python
高考考python编程是真的吗
2020/07/20 Python
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
员工薪酬福利制度
2014/01/17 职场文书
机械加工与数控专业自荐书
2014/06/04 职场文书
2015年会计个人工作总结
2015/04/02 职场文书
重阳节主题班会
2015/08/17 职场文书
聊聊基于pytorch实现Resnet对本地数据集的训练问题
2022/03/25 Python