利用 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中常用的SET和GET
Jan 13 Javascript
基于jquery实现的鼠标滑过按钮改变背景图片
Jul 15 Javascript
js中arguments的用法(实例讲解)
Nov 30 Javascript
IE6浏览器中window.location.href无效的解决方法
Nov 20 Javascript
JavaScript变量声明详解
Nov 27 Javascript
node.js使用cluster实现多进程
Mar 17 Javascript
JS数组去掉重复数据只保留一条的实现代码
Aug 11 Javascript
Vue.js原理分析之observer模块详解
Feb 17 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
Oct 19 jQuery
详解如何在webpack中做预渲染降低首屏空白时间
Aug 22 Javascript
如何使用Node.js爬取任意网页资源并输出PDF文件到本地
Jun 17 Javascript
Node.js实现简单管理系统
Sep 23 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中常用的预定义变量小结
2012/05/09 PHP
基于PHP选项与信息函数的使用详解
2013/05/10 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
Javascript 类与静态类的实现(续)
2010/04/02 Javascript
javascript实现禁止复制网页内容
2014/12/16 Javascript
jQuery中hover方法和toggle方法使用指南
2015/02/27 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
AngularJS 模块详解及简单实例
2016/07/28 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
Angular 理解module和injector,即依赖注入
2016/09/07 Javascript
domReady的实现案例
2016/11/23 Javascript
livereload工具实现前端可视化开发【推荐】
2016/12/23 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
对比分析Django的Q查询及AngularJS的Datatables分页插件
2017/02/07 Javascript
babel基本使用详解
2017/02/17 Javascript
Angular JS 生成动态二维码的方法
2017/02/23 Javascript
JavaScript中 DOM操作方法小结
2017/04/25 Javascript
React之PureComponent的使用作用
2018/07/10 Javascript
vue观察模式浅析
2018/09/25 Javascript
使用VueRouter的addRoutes方法实现动态添加用户的权限路由
2019/06/03 Javascript
layer父页获取弹出层输入框里面的值方法
2019/09/02 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
2019/09/12 Javascript
[39:07]LGD vs VP 2018国际邀请赛淘汰赛BO3 第二场 8.21
2018/08/22 DOTA
python操作CouchDB的方法
2014/10/08 Python
python基础练习之几个简单的游戏
2017/11/10 Python
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
美德好少年事迹材料
2014/01/19 职场文书
爱国演讲稿500字
2014/05/04 职场文书
八项规定对照检查材料
2014/08/31 职场文书
法定授权委托证明书
2014/09/27 职场文书
大学生自荐信怎么写
2015/03/26 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
详解MySQL中timestamp和datetime时区问题导致做DTS遇到的坑
2021/12/06 MySQL