利用 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 相关文章推荐
网页设计常用的一些技巧
Dec 22 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
Jun 25 Javascript
jquery下onpropertychange事件的绑定方法
Aug 01 Javascript
推荐阅读的js快速判断IE浏览器(兼容IE10与IE11)
Dec 13 Javascript
jQuery动画效果相关方法实例分析
Dec 31 Javascript
实现JavaScript高性能的数据存储
Dec 11 Javascript
在点击div中的p时,如何阻止事件冒泡
Feb 07 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
JS基于递归实现网页版计算器的方法分析
Dec 20 Javascript
vue ssr+koa2构建服务端渲染的示例代码
Mar 23 Javascript
vue跳转页面的几种方法(推荐)
Mar 26 Javascript
微信小程序APP页面的之间的相互传递参数以及自定义组件
Apr 19 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发送邮件类代码附详细说明
2008/07/10 PHP
php入门学习知识点三 PHP上传
2011/07/14 PHP
ajax返回值中有回车换行、空格的解决方法分享
2013/10/24 PHP
thinkphp区间查询、统计查询与SQL直接查询实例分析
2014/11/24 PHP
Javascript实现滚动图片新闻的实例代码
2013/11/27 Javascript
jquery中load方法的用法及注意事项说明
2014/02/22 Javascript
JavaScript代码判断点击第几个按钮
2015/12/13 Javascript
Bootstrap Tree View简单而优雅的树结构组件实例解析
2017/06/15 Javascript
详解微信小程序文件下载--视频和图片
2019/04/24 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
vue $set 给数据赋值的实例
2019/11/09 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
2020/09/16 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
使用Python的PEAK来适配协议的教程
2015/04/14 Python
python 读写txt文件 json文件的实现方法
2016/10/22 Python
python分割列表(list)的方法示例
2017/05/07 Python
Python编程实现粒子群算法(PSO)详解
2017/11/13 Python
Python机器学习logistic回归代码解析
2018/01/17 Python
详解python while 函数及while和for的区别
2018/09/07 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
使用python搭建服务器并实现Android端与之通信的方法
2019/06/28 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
python pygame实现滚动横版射击游戏城市之战
2019/11/25 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
详解Python中list[::-1]的几种用法
2020/11/16 Python
Hobbs官方网站:英国奢华女性时尚服装
2020/02/22 全球购物
.NET里面什么时候需要调用垃圾回收
2015/06/01 面试题
师范大学应届生求职信
2013/11/21 职场文书
大学生活动策划方案
2014/02/10 职场文书
2014厂务公开实施方案
2014/02/17 职场文书
汽车检测与维修专业求职信
2014/07/04 职场文书
检讨书范文
2015/01/27 职场文书
2015年乡镇统计工作总结
2015/04/22 职场文书
国庆节主题班会
2015/08/15 职场文书
会计继续教育培训心得体会
2016/01/19 职场文书