开发CLI命令行
命令行工具:CLI 是在命令行终端使用的工具,如git, npm, vim 都是CLI工具。比如我们可以通过 git clone 等命令简单把远程代码复制到本地
和 cli 相对的是图形用户界面(gui),gui 侧重于易用,cli 则侧重于效率。
如何开发一个CLI工具?
先初始化一个项目:
mkdir plgcli
cd plgcli 创建 plgcli文件夹, 进入文件夹
修改 package.json文件,增加bin字段 {
"name": "plgcli",
"version": "1.0.0",
"description": "PLG CLI tool",
"main": "index.js",
"bin": {
"PLG": "./bin/index.js"
},
"scripts": {
"test": "test"
},
"keywords": [
"PLG",
"CLI",
"Tool"
],
"author": "winyh",
"license": "ISC",
"dependencies": {
"commander": "^2.20.0"
}
}
运行 node index.js
#!/usr/bin/env node
console.log('hello ')
一般 cli都有一个特定的命令,比如 git,刚才使用的 code 等,我们也需要设置一个命令,就叫 PLG 吧!如何让终端识别这个命令呢?很简单,打开 package.json 文件,添加一个字段 bin,并且声明一个命令关键字和对应执行的文件:如上
然后我们测试一下,在终端中输入 PLG,会提示:
command not found: PLG
为什么会这样呢?回想一下,通常我们在使用一个 cli 工具时,都需要先安装它
而我们的 PLG-cli 并没有发布到 npm 上,当然也没有安装过了,所以终端现在还不认识这个命令。通常我们想本地测试一个 npm 包,可以使用:npm link 这个命令,本地安装这个包,我们执行一下
然后再执行
PLG
命令,看正确输出 hello world! 了
1.完成查看版本的功能
如PLG -v
有两个问题
1.如何获取参数?
2.如何获取版本信息?
在 node 程序中,通过 process.argv 可获取到命令的参数,以数组返回
2.执行复杂命令
有点多个参数时,或者或者像新建项目这种需要用户输入项目名称(我们称作“问答”)的命令时,通过 switch case 和 process.argv 获取参数就力不从心了,这时需要引入专门处理命令行交互的包commander.提供了用户命令行输入和参数解析强大功能
commander已经为我们创建好了帮助信息,以及两个参数 -V 和 -h
3.添加问答操作
引入inquirer包文件,修改 index.js文件
#!/usr/bin/env node
const program = require('commander');
const inquirer = require("inquirer");
const initAction = () => {
inquirer.prompt([{
type:"input",
message:"请输入项目名称:",
name:'name'
}]).then( answers => {
console.log(`项目名为: ${answers.name}`)
})
}
program.version(require("../package.json").version) program
.command("init")
.description("创建项目")
.action(initAction) program.parse(process.argv)
4.运行shell脚本
引入shelljs库
5.cli 工具发布到 npm
npm publish
开发CLI命令行的更多相关文章
- PHP的CLI命令行运行模式浅析
在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...
- golang常用库:cli命令行/应用程序生成工具-cobra使用
golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...
- ThinkPHP3.1.2 使用cli命令行模式运行
ThinkPHP3.1.2 使用cli命令行模式运行 标签(空格分隔): php 前言 thinkphp3.1.2 需要使用cli方法运行脚本 折腾了一天才搞定 3.1.2的版本真的很古老 解决 增加 ...
- Angular CLI 命令行工具
工欲善其事必先利其器.好的工具让开发更加简单便捷. 1.全局安装angular cli npm install -g @angular/cli 2.安装完成后就可以使用angular-cli命令行工具 ...
- Apache Commons CLI命令行启动
今天又看了下Hangout的源码,一般来说一个开源项目有好几种启动方式--比如可以从命令行启动,也可以从web端启动.今天就看看如何设计命令行启动... Apache Commons CLI Apac ...
- 通过npm写一个cli命令行工具
前言 如果你想写一个npm插件,如果你想通过命令行来简化自己的操作,如果你也是个懒惰的人,那么这篇文章值得一看. po主的上一篇文章介绍了定制自己的模版,但这样po主还是不满足啊,项目中我们频繁的需要 ...
- GO语言之urfave/cli命令行解析
练习URL: https://blog.csdn.net/sd653159/article/details/83381786 相信只要部署过线上服务,都知道启动参数一定是必不可少的,当你在不同的网络. ...
- CI 框架下执行CLI(命令行)
1.可以按照Ci官方文件的指导来进行操作 让我们先创建一个简单的控制器,打开你的文本编辑器,新建一个文件并命名为 Tools.php,然后输入如下的代码: <?php class Tools e ...
- 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具
源代码地址: Github仓库地址 个人网站:个人网站地址 前言 不知道你是否有过这样的经历.不管你是什么岗位,前端也好,后端也罢,想去了解一下Java开发到底是什么样的,它是不是真的跟传说中的一样. ...
随机推荐
- Windows 下 mysql 安装
mysql官网下载地址:https://downloads.mysql.com/archives/community/ 以5.7.20版本为例 首先安装包解压后,没有网上教程里面提到的data文件夹和 ...
- Codeforces Round #590 (Div. 3) 万恶的自己WAC
C题:一道简单的C题卡了半天,我太菜了 题意:给你一个n*2的矩阵,每个位置有一个数字,对应一种管道,要求通道可不可以从左上通到右下 由提议可以看出,1,2对应的是直管道,3,4,5,6对应弯管道,只 ...
- goroutine 修改全局变量无效问题
原文:https://studygolang.com/topics/7050 go修改全局变量的问题 测试 goroutine 修改全局变量,有x y 两个全局函数,分别在两个 goroutine f ...
- 那些吓人的 Linux 命令
本文转载于其它网站,原作者如有问题,请您及时联系我,及时删除! 哪些Linux命令会让人联想到妖魔鬼怪?不妨好好瞧一瞧! 每年一度的万圣节马上就要到来,是时候稍微关注一下Linux那吓人的一面了.哪些 ...
- java-集合处理数据的效率差异
先给结论,ArrayList数组结构的,插入和删除耗时长,get(index)耗时短. LinkedList是链表结构的,插入和删除耗时短,get(index)耗时长. 常用的几种集合,ArrayLi ...
- SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)
以二次贝塞尔曲线的公式为例: js函数: //p0.p1.p2三个点,其中p0为起点,p2为终点,p1为控制点 //它们的坐标用数组表示[x,y] //t的范围是0-1 function qBerzi ...
- [2019牛客多校第四场][G. Tree]
题目链接:https://ac.nowcoder.com/acm/contest/884/G 题目大意:给定一个树\(A\),再给出\(t\)次询问,问\(A\)中有多少连通子图与树\(B_i\)同构 ...
- BZOJ 3864 Hero meet devil (状压DP)
最近写状压写的有点多,什么LIS,LCSLIS,LCSLIS,LCS全都用状压写了-这道题就是一道状压LCSLCSLCS 题意 给出一个长度为n(n<=15)n(n<=15)n(n< ...
- python自动华 (十六)
Python自动化 [第十六篇]:JavaScript作用域和Dom收尾 本节内容: javascript作用域 DOM收尾 JavaScript作用域 JavaScript的作用域一直以来是前端开发 ...
- 006_FreeRTOS其他API函数
(一)FreeRTOS其他API函数是在调试中使用的,具体使用的看书本,贴出来为了方便查找 (二)FreeRTOS其他API函数 (三)常用 1. uxTaskGetSystemState() 获取信 ...