利用 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 相关文章推荐
IE的fireEvent方法概述及应用
Feb 22 Javascript
javascript中的window.location.search方法简介
Sep 02 Javascript
JSON 数字排序多字段排序介绍
Sep 18 Javascript
JavaScript DOM 对象深入了解
Jul 20 Javascript
jQuery中Find选择器用法示例
Sep 21 Javascript
Angular2从搭建环境到开发步骤详解
Oct 17 Javascript
Javascript下拉刷新的简单实现
Feb 14 Javascript
JS实现简单的天数计算器完整实例
Apr 28 Javascript
jQuery实现可编辑表格并生成json结果(实例代码)
Jul 19 jQuery
CheckBox多选取值及判断CheckBox选中是否为空的实例
Oct 31 Javascript
vue cli升级webapck4总结
Apr 04 Javascript
AngularJS中ng-options实现下拉列表的数据绑定方法
Aug 13 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配置php-fpm启动参数及配置详解
2013/11/04 PHP
保存到桌面、设为桌面且带图标的PHP代码
2013/11/19 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
老生常谈PHP面向对象之命令模式(必看篇)
2017/05/24 PHP
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
详解JavaScript的策略模式编程
2015/06/24 Javascript
jquery获取url参数及url加参数的方法
2015/10/26 Javascript
JavaScript中判断数据类型的方法总结
2016/05/24 Javascript
微信公众号开发 自定义菜单跳转页面并获取用户信息实例详解
2016/12/08 Javascript
js is_valid_filename验证文件名的函数
2017/07/19 Javascript
vue toggle做一个点击切换class(实例讲解)
2018/03/13 Javascript
老生常谈JS中的继承及实现代码
2018/07/06 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
微信小程序 搜索框组件代码实例
2019/09/06 Javascript
JQuery实现ul中添加LI和删除指定的Li元素功能完整示例
2019/10/16 jQuery
JavaScript交换两个变量方法实例
2019/11/25 Javascript
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
[02:16]完美世界DOTA2联赛PWL S3 集锦第三期
2020/12/21 DOTA
pyramid配置session的方法教程
2013/11/27 Python
Python random模块常用方法
2014/11/03 Python
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
对Django 转发和重定向的实例详解
2019/08/06 Python
pytorch实现保证每次运行使用的随机数都相同
2020/02/20 Python
python Cartopy的基础使用详解
2020/11/01 Python
英国蛋糕装饰用品一站式商店:Craft Company
2019/03/18 全球购物
应届毕业生求职自荐书
2014/01/03 职场文书
2014年全国爱牙日宣传活动方案
2014/09/21 职场文书
学生个人总结范文
2015/02/15 职场文书
故意伤害罪辩护词
2015/05/21 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
写好求职信的技巧解密
2019/05/14 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
Python基础之进程详解
2021/05/21 Python
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL