利用 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 相关文章推荐
js substring从右边获取指定长度字符串(示例代码)
Dec 23 Javascript
Javascript代码实现仿实例化类
Apr 03 Javascript
jQuery模仿单选按钮选中效果
Jun 24 Javascript
js微信分享API
Oct 11 Javascript
HTML5 JS压缩图片并获取图片BASE64编码上传
Nov 16 Javascript
JS如何设置iOS中微信浏览器的title
Nov 22 Javascript
简单实现jQuery多选框功能
Jan 09 Javascript
JavaScript实现替换字符串中最后一个字符的方法
Mar 07 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
微信小程序登录换取token的教程
May 31 Javascript
React 路由懒加载的几种实现方案
Oct 23 Javascript
WebGL学习教程之Three.js学习笔记(第一篇)
Apr 25 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 mb_convert_encoding文字编码的转换函数介绍
2011/11/10 PHP
PHP数据库操作之基于Mysqli的数据库操作类库
2014/04/19 PHP
Yii2隐藏frontend/web和backend/web的方法
2015/12/12 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
Jquery easyui 下loaing效果示例代码
2013/08/12 Javascript
jquery中animate动画积累的解决方法
2013/10/05 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
JavaScript中的Math.atan2()方法使用详解
2015/06/15 Javascript
JS+CSS相对定位实现的下拉菜单
2015/10/06 Javascript
Angular ng-repeat遍历渲染完页面后执行其他操作详细介绍
2016/12/13 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
Echarts动态加载多条折线图的实现代码
2019/05/24 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
JavaScript实现H5接金币功能(实例代码)
2021/02/22 Javascript
python学习笔记:字典的使用示例详解
2014/06/13 Python
详解python单例模式与metaclass
2016/01/15 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
2018/10/11 Python
Python更新所有已安装包的操作
2020/02/13 Python
python实现信号时域统计特征提取代码
2020/02/26 Python
python用TensorFlow做图像识别的实现
2020/04/21 Python
HTML5 本地存储 LocalStorage详解
2016/06/24 HTML / CSS
基于HTML5+Webkit实现树叶飘落动画
2017/12/28 HTML / CSS
html+js 实现markdown编辑器效果
2019/10/23 HTML / CSS
Lampenwelt德国:欧洲领先的灯具和照明在线商店
2018/08/05 全球购物
美国健康和保健平台:healtop
2020/07/02 全球购物
酒吧创业计划书
2014/01/18 职场文书
计算机学生求职信范文
2014/01/30 职场文书
十一酒店活动方案
2014/02/20 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
Go语言空白表示符_的实例用法
2021/07/04 Golang
Java虚拟机内存结构及编码实战分享
2022/04/07 Java/Android
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript