Nodejs 利用Commander写自己的 命令行工具

2023-05-16

image.png

关注公众号"seeling_GIS",回复『前端视频』,领取前端学习视频资料
前言

在使用Nodejs过程中,有很多包都支持全局安装,然后提供一个命令,然后在命令行我们就可以完成一些任务,像 express, grunt, bower, yeoman, reap, karma, requirejs 等。有时候,我们也需要自己开发这样的命令行工具。

commander.js,可以帮助我们简化命令行的开发。

目录

  1. commander介绍

  2. commander安装

  3. commander的API

  4. 开发自定义的命令

  5. 发布为运行命令

1. commander介绍

commander是一个轻巧的nodejs模块,提供了用户命令行输入和参数解析强大功能。commander源自一个同名的Ruby项目。

commander的特性:

  • 自记录代码

  • 自动生成帮助

  • 合并短参数(“ABC”==“-A-B-C”)

  • 默认选项

  • 强制选项

  • 命令解析

  • 提示符

2. commander安装

我的系统环境

  • win10 64bit

  • Nodejs:v12.16.1

  • Npm:6.13.6

  • 新建并初始化项目

    npm init
    

安装commander等依赖

npm install commander cli-table2 superagent

编写一个简单的例子:增加文件app.js

const { program } = require('commander');

命令行输入测试:

无参数

PS F:\Codes\github\nodejs\commanderTest> node .\app.js       

一个参数

PS F:\Codes\github\nodejs\commanderTest> node .\app.js -d

多个参数

PS F:\Codes\github\nodejs\commanderTest> node .\app.js -ds -p bbq -l aa,bb,cc

help

PS F:\Codes\github\nodejs\commanderTest> node .\app.js --help

Version

PS F:\Codes\github\nodejs\commanderTest> node .\app.js -V

3. commander的API

  • Option(): 初始化自定义参数对象,设置“关键字”和“描述”

  • Command(): 初始化命令行参数对象,直接获得命令行输入

  • Command#command(): 定义一个命令名字

  • Command#action(): 注册一个callback函数

  • Command#option(): 定义参数,需要设置“关键字”和“描述”,关键字包括“简写”和“全写”两部分,以”,”,”|”,”空格”做分隔。

  • Command#parse(): 解析命令行参数argv

  • Command#description(): 设置description值

  • Command#usage(): 设置usage值

请参考API的官方例子:https://www.npmjs.com/package/commander

4. 开发一个自己的命令行工具,通过命令行来查询有道字典

#! /usr/bin/env node
const {
    program
} = require('commander');
const Table = require('cli-table2') // 表格输出
const superagent = require('superagent') // http请求 

function action(res) {
    console.log(res)
}
 
program
    .allowUnknownOption()
    .version('0.0.1')
    .usage('translator <cmd> [input]')

const url = `http://fanyi.youdao.com/openapi.do?keyfrom=toaijf&key=868480929&type=data&doctype=json&version=1.1`;

program
    .command('query')
    .description('翻译输入')
    .action((obj) => {
        let word = obj.args.join(' ');
        superagent.get(url)
            .query({
                q: word
            })
            .end(  (err, res)=> {
               
                if (err){
                    console.log('excuse me, try again')
                    return false
                } 
                let data = JSON.parse(res.text);
                let result ={}; 
                // 返回的数据处理
                if (data.basic) {
                    result[word] = data['basic']['explains'];
                } else if (data.translation) {
                    result[word] = data['translation'];
                } else {
                    console.error('error');
                }
                console.log()
                // 输出表格
                let table = new Table();
                table.push(result);
                console.log(table.toString());
            })
    }); 
if (!process.argv[2]) {
    program.help();
    console.log();
}
program.parse(process.argv);

命令行输入测试:

PS F:\Codes\github\nodejs\commanderTest> node .\youdao.js query someone

┌─────────┬────────────────────────────┐
│ someone │ pron. 有人,某人;重要人物   │
└─────────┴────────────────────────────┘
  1. 命令行工具部署

1. 在package.json 里面添加
"bin": { "youdao": "bin/youdao.js" },

2.  执行 npm link 设置全局调用

3.  执行结果:

 node youdao query my

┌────┬────────────┬───────────────────────────────┬─────────────────────────────────┐
│ my │ pron. 我的 │ int. 哎呀(表示惊奇等);喔唷 │ n. (My)人名;(越)美;(老、柬)米 │
└────┴────────────┴───────────────────────────────┴─────────────────────────────────┘

Cesium 基础系列


【Cesium 基础】vue3+cesium 环境搭建(一)

【Cesium 基础】ImageryProvider 服务 (二)

【Cesium 基础】Entity API(三)

『Cesium 基础』Entity 样式设置(四)

『Cesium 基础』Cesium ion 在线资源调用(五)

『Cesium 基础』Cesium Knockout 使用(六)

【Vue@Leaflet】系列


【Vue@Leaflet】初始化

【Vue@Leaflet】底图 Baselayer

【vue@Leaflet】创建Leaflet组件

【vue@Leaflet】创建TileLayer组件


更多内容,欢迎关注公众号
seeling_GIS

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Nodejs 利用Commander写自己的 命令行工具 的相关文章

  • “从0开始的FreeRTOS”系列教程第一讲

    大家好 xff0c 这次给大家带来了Freertos的教程 xff0c 这次打算一口气做完一整个系列的教程 xff0c 大概更新频率会是月更 这个系列的教程的主要目的是带大家了解实时系统 real time operating system
  • 我的2013奋发突进

    先简单介绍自己 男 大专学历2012年6月毕业 期间2011 6月 2012 6 算是实习期 正式实习了一年 从2012 6月实习结束后 没打算在原来实习的单位呆着 换了一家公司 一直到2013年的7月末 考虑到种种原因 回归家乡了 技术篇
  • VR 杂想

    什么是VR VR xff08 科学技术 xff09 即VR xff08 Virtual Reality xff0c 即虚拟现实 xff0c 简称VR xff09 xff0c 是由美国VPL公司创建人拉尼尔 xff08 Jaron Lanie
  • 解决rosdep init错误和rosdep update错误以及ros密钥错误

    解决rosdep init错误和rosdep update错误以及ros密钥错误 如果仍无法解决下面所述问题 xff0c 欢迎留言 对于rosdep init错误有以下几种方法 1 更换软件源并更新软件包 sudo apt get upda
  • vscode使用技巧——webpack项目的断点调试

    为了方便调试 xff0c 我研究了一下如何使用vscode进行断点调试 本次尝试已在html template项目中测试通过 安装插件 在vscode的插件商店安装必要的插件 Debugger for Chrome 调整webpack配置
  • apt-get 源和常识

    本文内容 xff1a 1 apt get的源换成阿里或163的 2 atp get的源的常识 一 概述 安装好Ubuntu它自带源是国外的 xff0c 访问较慢 xff0c 经常会出现连接失败的情况 所以建议将它替换为国内的 xff08 如
  • 树莓派、百度DuerOS等RAW格式的镜像浏览、提取文件的方法

    前言 树莓派上装了docker等一堆东西 xff0c 要跑DuerOS的 DuerOS开发套件个人版 http open duer baidu com openduer product idk id 61 personal xff0c 有好
  • 解决Ubuntu可以ping通ip地址,不能ping通域名和浏览器无法上网的问题

    Ubuntu版本18 04 4 主要原因 原本的dns解析不行 要修改为谷歌的域名解析服务器8 8 8 8才行 并且每次关机后就会恢复默认 要添加到开机自启 1 修改配置文件 vim etc NetworkManager NetworkMa
  • Java核心技术卷1读书笔记

    Java核心技术卷1读书笔记 前言Math floorMod 前言 本笔记主要记录学习 JAVA核心技术 卷1 时遇到的问题或者心得 xff0c 若有朋友有更好的学习资源推荐请留言或联系我VX 18439428204 QQ 75107651
  • [前端基础] 浏览器篇

    提供基础用法 xff0c 基础概念引用 MDN W3C xff0c 基础内容做扩展知识 xff0c 可应对面试 xff0c 详细原理及应用需要去官网 GitHub 深入学习 1 常用 BOM 方法 BOM xff08 browser obj
  • STM32 keil5 报错:flash download failed-cortex M3解决方法

    起因 因为之前自己使用的STM32都是使用的F4 xff0c 自己打了一块STM32F1C8T6板子 xff0c 焊好之后 xff0c 打开以前正点原子的例程的时候 xff0c 出现无法烧录的情况 xff0c 总是报这样的错误 xff0c
  • Hadoop实战学习(3)-读取数据库内容

    要读取数据库中的数据 xff0c 首先需要实现一个实体类 xff0c 这个实体类部分映射数据库中要查询的表的字段 且该实体类需要实 现Writable与DBWritable两个接口 xff0c DBWritable的实现类负责查询与写入 x
  • 消失点(灭点、Vanishing Point)

    目录 定义 xff1a 性质 xff1a 消失点分为3种 一条直线的消失点是过摄影中心且平行于该直线的直线与像平面的交点 地面物体的两个消失点的连线为水平线 xff0c 提供地平线的信息 应用 xff1a 计算焦距和图像中心 求像心 求焦距
  • window.performance.timing 字段说明和主要性能指标

    window performance是W3C性能小组引入的新的API xff0c 目前IE9以上的浏览器都支持 字段说明 xff1a connectStart 和 connectEnd 分别代表TCP建立连接和连接成功的时间节点 domCo
  • C++中的private, public, protected

    0 概述 数据隐藏是C 43 43 面向对象编程的重要特征之一 xff0c 它允许我们隐藏对象内部细节即数据成员 xff0c 防止程序的函数直接访问一个类对象的内部表示 数据成员和成员函数 对类成员函数的访问限制由访问修饰符指定 访问修饰符
  • 数据链路层设计要点

    数据链路层保证数据在两台机器间进行可靠 有效的通信 需要考虑传输错误 xff08 检错 纠错等 xff09 延迟等问题 因此 xff0c 其功能可概括为 xff1a 1 向网络层提供一个定义良好的服务接口 xff1b 2 处理传输错误 xf
  • 由NT Service中调用SendInput模拟键盘鼠标事件了解到的

    TODO
  • 远程连接之ssh的使用(日志监控)

    ssh的简介 ssh服务 Secure Shell xff1a SSH 为建立在应用层基础上的安全协议 SSH 是较可靠 xff0c 专为远程登录提供服务 解决的问题 xff1a 对服务器的远程控制 xff0c 远程操作 ssh服务是安全的
  • 基于润和hi3516 dv300开发板,体验鸿蒙3.0 L1小型系统拍照Sample

    背景 xff1a 希望能在润和hi3516 dv300开发板上 xff0c 体验拍照功能 前段时间花了一段精力 xff0c 好不容易在润和hi3516 dv300上烧录了L2系统 xff0c 并跑成功了ArkUI应用 xff0c 详见 xf
  • 集群故障处理之处理思路以及健康状态检查(三十三)

    前言 按照笔者的教程 xff0c 大家应该都能够比较顺畅的完成k8s集群的部署 xff0c 不过由于环境 配置以及对Linux k8s的不了解会导致很多问题 异常和故障 xff0c 这里笔者分享一些处理技巧和思路 xff0c 以及部分常见的

随机推荐

  • ElasticSearch集群日志限制问题

    本文是基于CentOS7的环境下使用rpm包安装进行说明 ELK的默认日志记录会增长很多 xff0c 除ElasticSearch外 xff0c 都会无限增长 xff0c 长时间运行可能带来灾难性的后果 xff08 如 xff1a 节点宕机
  • 集群故障处理之处理思路以及听诊三板斧(三十四)

    前言 本篇主要分享一些处理故障和问题绝招 xff0c 比如听诊三板斧 xff1a 1 xff09 查看日志 2 xff09 查看资源详情和事件 3 xff09 查看资源配置 xff08 YAML xff09 如果还是不太好分析 xff0c
  • maven打包根据指定参数,自定义war包名称

    首先定义如下参数 xff1a lt profile gt lt id gt front lt id gt lt properties gt lt rp build warname gt front lt rp build warname g
  • 银联周雍恺:开放交换机组网技术和前沿进展

    在第三届未来网络发展大会SDN NFV技术与应用创新分论坛上中国银联电子商务与电子支付国家工程实验室周雍恺博士 xff0c 发表了主题为 开放交换机组网技术和前沿进展 的主题演讲 本次演讲内容主要有三大部分的内容 xff0c 第一部分是开放
  • 华为面试题

    http topic csdn net u 20080703 13 62ce76ec fba4 45c6 95fb 625fcfaec73e html
  • 2014 百度研发工程师笔试题

    一简答题 1osi网络七层 2线程共享方式 3 tcp和udp区别 xff0c 及协议 二 编程题 1给一个数组A 61 a1 xff0c a2 an 列出所有的组合方式 2给定一个数组 xff0c 数组相邻两个数的差的绝对值小于1 xff
  • 2014小米校园招聘笔试题

    1奇偶排序 在一个N个整数数组里面 xff0c 有多个奇数和偶数 xff0c 设计一个排序算法 xff0c 令所有的奇数都在偶数的左边 例如输入a 61 8 4 1 6 7 4 9 6 4 2叉数降维 设计一个算法 xff0c 把一个排序二
  • bootloader详解(转载)

    一 bootloader介绍 bootloader是硬件在加电开机后 xff0c 除BIOS固化程序外最先运行的软件 xff0c 负责载入真正的操作系统 xff0c 可以理解为一个超小型的os 目前在Linux平台中主要有lilo grub
  • 关于LVM管理PVcreate过程中错误Device /dev/sdb not found (or ignored by filtering)

    今天在做环境中一台机器磁盘扩容过程中出现此报错 xff0c 第一次遇到 xff0c 说一下情况 xff1a 1 我的机器中原本有一个LV 500G xff0c 作为nova节点的存储空间 xff0c 空间不够 xff0c 想扩容1T xff
  • DIY一套NAS+私有云盘+下载机

    如果你家里有多台设备需要联网需要娱乐 xff0c 你一定会或多或少遇到设备碎片化带来的烦恼 当然 xff0c 已经有很多厂商包括新晋的小米 360在内的互联网公司做了这个事情 xff0c 给你搞个家庭存储中心 xff0c 基本能解决你的大部
  • SD-WAN三种基础技术架构

    第一类架构 xff1a 叠加网络结构 xff08 On Prem Overlay xff09 xff0c 这是最基本的SD WAN架构 xff0c 初期SD WAN的典型架构 xff0c 适合中小企业小规模快速组网 如图所示 xff1a 简
  • windows共享时出现“指定网络名不再可用”解决办法

    问题 xff1a 同时按住 windows 43 r 弹出运行面板 xff0c 输入 IP xff0c 点击 确定 不能共享 xff0c 提示 指定网络名不再可用 解决方法 xff1a 如果不能访问 xff0c 右键单击计算机 xff0c
  • SD-WAN|跨境网络专线

    随着公司越来越依赖云应用程序 分散的团队和统一通信 xff0c 确保连接性不仅重要 xff0c 而且对任务至关重要 但传统的 WAN 并不总能应对挑战 xff0c 使用公共互联网也不总是可靠或安全的 现在 xff0c 通过 SD WAN 改
  • 一看就会!DS1302实时时钟原理和程序

    DS1302介绍 一款高性能 低功耗的日历时钟 DS1302是一种串行接口的实时时钟 xff0c 内部有可编程的日历时钟和31个字节的静态RAM xff0c 可以自动进行闰年补偿 工作电压范围宽 xff08 2 5V 5 5V xff09
  • Proxmox 6.x 升级到7.0步骤

    Proxmox 6 x 升级到7 0步骤 首先需要升级到6 4的最新版本 删除企业源 rm rf etc apt sources list d pve enterprise list 下载秘钥 wget http mirrors ustc
  • IDEA实用插件之Easy Javadoc——添加类与方法的注释

    应用场景 开发过程中 xff0c 需要对类和方法添加注释 xff0c 类的注释比较好实现 xff0c 通过设置模板 xff0c 在创建时即可自动创建预设的注释 而为方法添加注释 xff0c 则就没那么容易 xff0c 最主要的影响在于参数的
  • 若依前后端分离项目集成CAS 5.3实现单点登录

    一 获取CAS5 3项目资源 GitHub apereo cas overlay template at 5 3 cas5 3 x还是基于jdk8运行 xff0c 下一个版本6 0 x就基于jdk9了 xff0c 随着cas版本升级要求jd
  • ubuntu20.04 图形界面和CLI模式开启与关闭

    提示 xff1a 请注意 信息的时效性 环境的相似度 侵删 xff01 文章目录 前言 查看服务运行状态 更改开机界面模式为图形界面 更改开机界面模式为CLI字符模式 其他 前言 非root用户记得命令前加上 sudo 提示 xff1a 以
  • nginx中CPU亲和性源码解读

    1 CPU 亲和性 1 1 CPU亲和性介绍 简单地说 xff0c CPU 亲和性 xff08 affinity xff09 就是进程要在某个给定的 CPU 上尽量长时间地运行而不被迁移到其他处理器的倾向性 Linux 内核进程调度器天生就
  • Nodejs 利用Commander写自己的 命令行工具

    关注公众号 34 seeling GIS 34 xff0c 回复 前端视频 xff0c 领取前端学习视频资料 前言 在使用Nodejs过程中 xff0c 有很多包都支持全局安装 xff0c 然后提供一个命令 xff0c 然后在命令行我们就可