命令行工具: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命令行的更多相关文章

  1. PHP的CLI命令行运行模式浅析

    在做开发的时候,我们不仅仅只是做各种网站或者接口,也经常需要写一些命令行脚本用来处理一些后端的事务.比如对数据进行处理统计等.当然也是为了效率着想,当一个事务有可能会有较长的耗时时,往往会交由服务器的 ...

  2. golang常用库:cli命令行/应用程序生成工具-cobra使用

    golang常用库:cli命令行/应用程序生成工具-cobra使用 一.Cobra 介绍 我前面有一篇文章介绍了配置文件解析库 Viper 的使用,这篇介绍 Cobra 的使用,你猜的没错,这 2 个 ...

  3. ThinkPHP3.1.2 使用cli命令行模式运行

    ThinkPHP3.1.2 使用cli命令行模式运行 标签(空格分隔): php 前言 thinkphp3.1.2 需要使用cli方法运行脚本 折腾了一天才搞定 3.1.2的版本真的很古老 解决 增加 ...

  4. Angular CLI 命令行工具

    工欲善其事必先利其器.好的工具让开发更加简单便捷. 1.全局安装angular cli npm install -g @angular/cli 2.安装完成后就可以使用angular-cli命令行工具 ...

  5. Apache Commons CLI命令行启动

    今天又看了下Hangout的源码,一般来说一个开源项目有好几种启动方式--比如可以从命令行启动,也可以从web端启动.今天就看看如何设计命令行启动... Apache Commons CLI Apac ...

  6. 通过npm写一个cli命令行工具

    前言 如果你想写一个npm插件,如果你想通过命令行来简化自己的操作,如果你也是个懒惰的人,那么这篇文章值得一看. po主的上一篇文章介绍了定制自己的模版,但这样po主还是不满足啊,项目中我们频繁的需要 ...

  7. GO语言之urfave/cli命令行解析

    练习URL: https://blog.csdn.net/sd653159/article/details/83381786 相信只要部署过线上服务,都知道启动参数一定是必不可少的,当你在不同的网络. ...

  8. CI 框架下执行CLI(命令行)

    1.可以按照Ci官方文件的指导来进行操作 让我们先创建一个简单的控制器,打开你的文本编辑器,新建一个文件并命名为 Tools.php,然后输入如下的代码: <?php class Tools e ...

  9. 来认识一下venus-init——一个让你仅需一个命令开始Java开发的命令行工具

    源代码地址: Github仓库地址 个人网站:个人网站地址 前言 不知道你是否有过这样的经历.不管你是什么岗位,前端也好,后端也罢,想去了解一下Java开发到底是什么样的,它是不是真的跟传说中的一样. ...

随机推荐

  1. 【转】SpringBoot自定义序列化的使用方式--WebMvcConfigurationSupport

    场景及需求: 项目接入了SpringBoot开发,现在需求是服务端接口返回的字段如果为空,那么自动转为空字符串. 例如:[     {         "id": 1,       ...

  2. easyui-dialog打开之后append("标签")标签存在但是显示不出来

    初始化dialog $("#upDiv").dialog("open");//初始化dialog弹出窗口 注意: 1:  append("标签&quo ...

  3. FWT 等总结 题解

    目录 与卷积: 代码: 或卷积: 代码: 异或卷积: 代码: FST:子集卷积 代码: 例题: CF914G 代码: uoj310[UNR #2]黎明前的巧克力 代码: CF662C Binary T ...

  4. robotframework出现错误:Keyword 'AppiumLibrary.Open Application' expected 1 to 2 non-keyword arguments,got 5.

    robotframework官网: http://robotframework.org/#introduction -------------- 出现的场景: 由于一开始不了解robotframewo ...

  5. 修改quartus 配置rom时memory很小的问题。

    我用的是quartus ii 13版本的仿真软件,在做VGA实验时显示用到640*480的图片所以就需要307200*1bit的rom.但是坑爹的megawizard- plug-in-manager ...

  6. 8月清北学堂培训 Day6

    今天是杨思祺老师的讲授~ 图论 双连通分量 在无向图中,如果无论删去哪条边都不能使得 u 和 v 不联通, 则称 u 和 v 边双连通: 在无向图中,如果无论删去哪个点(非 u 和 v)都不能使得 u ...

  7. 初次Java web项目的建立以及与数据库的连接

    题目要求: 1登录账号:要求由6到12位字母.数字.下划线组成,只有字母可以开头:(1分) 2登录密码:要求显示“• ”或“*”表示输入位数,密码要求八位以上字母.数字组成.(1分) 3性别:要求用单 ...

  8. scrapy框架之Selectors选择器

    Selectors(选择器) 当您抓取网页时,您需要执行的最常见任务是从HTML源中提取数据.有几个库可以实现这一点: BeautifulSoup是Python程序员中非常流行的网络抓取库,它基于HT ...

  9. 基于 intellij IDEA 快速搭建Spring Boot项目

           在<一步步搭建 Spring Boot maven 框架的工程>一文中,已经介绍了如何使用Eclipse快速搭建Spring Boot项目.由于最近将开发工具由Eclipse ...

  10. flex的圣杯布局记录 (flex : 0 0 80px)