命令行工具: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
原文地址:https://www.cnblogs.com/winyh/p/11125625.html