利用 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获取 type=radio 值的方法
May 09 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
Nov 17 Javascript
canvas实现粒子时钟效果
Feb 06 Javascript
前端主流框架vue学习笔记第二篇
Jul 26 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
关于axios不能使用Vue.use()浅析
Jan 12 Javascript
ES6中的迭代器、Generator函数及Generator函数的异步操作方法
May 12 Javascript
微信小程序结合Storage实现搜索历史效果
May 18 Javascript
layer父页获取弹出层输入框里面的值方法
Sep 02 Javascript
基于Layui自定义模块的使用方法详解
Sep 14 Javascript
关于angular 8.1使用过程中的一些记录
Nov 25 Javascript
vite+vue3.0+ts+element-plus快速搭建项目的实现
Jun 24 Vue.js
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静态延迟绑定和普通静态效率的对比
2017/10/20 PHP
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
jquery及原生js获取select下拉框选中的值示例
2013/10/25 Javascript
node.js Web应用框架Express入门指南
2014/05/28 Javascript
Jquery的基本对象转换和文档加载用法实例
2015/02/25 Javascript
javascript实现五星评价代码(源码下载)
2015/08/11 Javascript
理解Angular数据双向绑定
2016/01/10 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
react native实现往服务器上传网络图片的实例
2017/08/07 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
vue中,在本地缓存中读写数据的方法
2018/09/21 Javascript
layui点击弹框页面 表单请求的方法
2019/09/21 Javascript
js通过循环多张图片实现动画效果
2019/12/19 Javascript
vue created钩子函数与mounted钩子函数的用法区别
2020/11/05 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
Python实现文件信息进行合并实例代码
2018/01/17 Python
几种实用的pythonic语法实例代码
2018/02/24 Python
python逐行读写txt文件的实例讲解
2018/04/03 Python
使用coverage统计python web项目代码覆盖率的方法详解
2019/08/05 Python
CSS3 border-image详解、应用及jQuery插件
2011/08/29 HTML / CSS
利用CSS3的border-radius绘制太极及爱心图案示例
2016/05/17 HTML / CSS
Juice Beauty官网:有机美容产品,护肤与化妆品
2020/06/13 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
秋季运动会稿件
2014/01/30 职场文书
数控专业大学毕业生职业规划范文
2014/02/06 职场文书
学校拾金不昧表扬信
2015/01/16 职场文书
汽车转让协议书
2015/01/29 职场文书
病人慰问信范文
2015/02/15 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
导游词之山西-五老峰
2019/10/07 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL
Mysql数据库手动及定时备份步骤
2021/11/07 MySQL
MySQL 外连接语法之 OUTER JOIN
2022/04/09 MySQL
Python sklearn分类决策树方法详解
2022/09/23 Python