开发CLI命令行

Posted winyh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开发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命令行的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你使用nodejs编写cli(命令行)

golang开发:类库篇命令行工具cli的使用

ganache-cli命令行参数说明

Ionic2的CLI的命令行

node编写cli命令行

node编写cli命令行