利用 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 相关文章推荐
JavaScript 模拟用户单击事件
Dec 31 Javascript
DWR实现模拟Google搜索效果实现原理及代码
Jan 30 Javascript
鼠标经过显示二级菜单js特效
Aug 13 Javascript
js实现仿百度瀑布流的方法
Feb 05 Javascript
如何编写高质量JS代码(续)
Feb 25 Javascript
jquery获取文档高度和窗口高度汇总
Jan 25 Javascript
详解Node.js串行化流程控制
May 04 Javascript
get  post jsonp三种数据交互形式实例详解
Aug 25 Javascript
详解Vue一个案例引发「内容分发slot」的最全总结
Dec 02 Javascript
ng-alain的sf如何自定义部件的流程
Jun 12 Javascript
浏览器JavaScript调试功能无法使用解决方案
Sep 18 Javascript
手把手教你如何编译打包video.js
Dec 09 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取得字符串首字母的方法
2015/03/25 PHP
php利用smtp类实现电子邮件发送
2015/10/30 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
简单实现php上传文件功能
2017/09/21 PHP
js 获取屏幕各种宽高的方法(浏览器兼容)
2013/05/15 Javascript
JavaScript中九种常用排序算法
2014/09/02 Javascript
浅谈String.valueOf()方法的使用
2016/06/06 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
AngularJS动态加载模块和依赖的方法分析
2016/11/08 Javascript
JS绘制微信小程序画布时钟
2016/12/24 Javascript
JavaScript实现同一个页面打开多张图片
2016/12/29 Javascript
swiper 解决动态加载数据滑动失效的问题
2018/02/26 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
cocos2dx+lua实现橡皮擦功能
2018/12/20 Javascript
vue + any-touch实现一个iscroll 实现拖拽和滑动动画效果
2019/04/08 Javascript
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
kafka调试中遇到Connection to node -1 could not be established. Broker may not be available.
2019/09/17 Javascript
vuex实现像调用模板方法一样调用Mutations方法
2019/11/06 Javascript
Python中用于转换字母为小写的lower()方法使用简介
2015/05/19 Python
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
使用tensorflow实现线性svm
2018/09/07 Python
python基于pdfminer库提取pdf文字代码实例
2019/08/15 Python
Python FFT合成波形的实例
2019/12/04 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
2020/05/15 Python
python开发入门——列表生成式
2020/09/03 Python
Sublime Text3最新激活注册码分享适用2020最新版 亲测可用
2020/11/12 Python
Python文件名匹配与文件复制的实现
2020/12/11 Python
html5 Canvas画图教程(1)—画图的基本常识
2013/01/09 HTML / CSS
一百多行代码实现react拖拽hooks
2021/03/23 Javascript
2015年综治维稳工作总结
2015/04/07 职场文书
公司的力量观后感
2015/06/05 职场文书
班级管理经验交流材料
2015/11/02 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
python爬虫之利用selenium模块自动登录CSDN
2021/04/22 Python
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python
keepalived + nginx 实现高可用方案
2022/12/24 Servers