开发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开发到底是什么样的,它是不是真的跟传说中的一样. ...
随机推荐
- Linux开机启动项总结
在应急响应时有时会遇到系统被植入后门,添加启动项等操作,如果不清楚启动项的话,可能会被黑客植入一些开机启动项,无法彻底清除后门程序,所以在这梳理下启动项的东西 1.操作系统接管硬件以后,首先读入 /b ...
- 浅谈angularJs
在家都知道,angular 可以实现双项数据绑定,其中它的占位符是{{}},他是是MVC数据分离, 首先要在<html>或<body>中建一个<body ng-app=& ...
- 剑指Offer的学习笔记(C#篇)-- 翻转单词的序列
题目描述 牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上.同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思.例如,“student ...
- 解决CentOS虚拟机开机黑屏卡死问题
默认配置 导致的错误 1.直接就是黑屏,连杠杠都没有 2.centos系统关不掉 3.关闭vmware提示:虚拟机XXX繁忙 解决方式 一(我的失败,依旧不行)1.强制关闭vmware,重启计算机(不 ...
- Django的ManyToManyField(多对多)中的through的作用
创建一个经典的多对多关系:一本书可以有多个作者,一个作者可以有多本书(如下) 运行“python manage.py makemigratons"和"python manage.p ...
- ACM-ICPC 2018 沈阳赛区现场赛 E. The Kouga Ninja Scrolls (切比雪夫距离+线段树)
题目链接: 题意:在二维平面上有 n 个人,每个人有一个位置(xi, yi)和门派 ci,m 个操作:①改变第 k 个人的位置:②改变第 k 个人的门派:③询问区间[l,r]之间不同门派的两个人的最大 ...
- SqlHelper发布—比Pagehelper更好用的分页插件
SqlHelper发布-比PageHelper性能更高 起源 前段时间开启了一个新的项目,在选择分页插件时,发现github上很流行的一个是pagehelper,在百度上搜索了一下,使用量.由于项目紧 ...
- SP703 SERVICE - Mobile Service
思路:DP 提交:1次 题解: 我们把处理到的要求作为阶段. \(f[i][x][y][z]\)表示第 \(i\) 个要求,三个人分别的位置. 发现这样有很多无用状态,因为显然在第 \(i\) 个要求 ...
- Self install windows service in .NET c#
http://stackoverflow.com/questions/4144019/self-install-windows-service-in-net-c-sharp using System; ...
- unix/linux 进程间文件锁
转自 http://www.cnblogs.com/hjslovewcl/archive/2011/03/14/2314333.html 有三种不同的文件锁,这三种都是“咨询性”的,也就是说它们依靠程 ...