开发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

 

posted @ 2019-07-03 11:59  winyh  阅读(4868)  评论(0编辑  收藏  举报