使用Node.js(TypeScript),cac和inquirer.js快速创建CLI
首先
找到了在使用Nodejs创建CLI工具时很有用的包,尝试使用后感觉不错,现在来介绍一下。
使用过的包裹
cac – 咖啡
创建一个简洁而强大的命令行界面框架。
https://www.npmjs.com/package/cac的中文释义如下:
inquirer.js是一个JavaScript库。
整合对话型界面非常方便。
以下是有关inquirer的npm包的链接:https://www.npmjs.com/package/inquirer
完成安装
$ npm i cac inquirer
$ npm i --save-dev @types/inquirer
样本
我将使用 Cac 写一个 CLI 的框架。
在下面的例子中,我让当输入类似 “cli hello hoge” 这样的命令时执行相应的处理。
import index from '../src/index'
import cac from 'cac'
const cli = cac()
cli.command('hello [name]', 'Enter your name').action(() => {
index()
})
cli.help()
cli.parse()
我们将使用inquirer来定义交互式界面。
在下面的例子中,我们定义了一个包含输入、列表和复选框的交互式界面。
import { prompt, Separator, QuestionCollection } from 'inquirer'
export default async (): Promise<void> => {
const name = process.argv[3]
if (!name) {
console.error('Please pass one argument!!')
process.exit(1)
}
const msg = `
Hello!! ${name} !!!
`
console.log(msg)
// Input
const inputQuestions: QuestionCollection = [
{
type: 'input',
message: "What's your name",
name: 'name'
}
]
await prompt(inputQuestions).then((answers: any) => {
console.log(JSON.stringify(answers, null, ' '))
})
// List
const listQuestions: QuestionCollection = [
{
type: 'list',
name: 'color',
message: 'What do you like color?',
choices: [
'black',
'red',
{
name: 'orange',
disabled: 'disabled'
},
'green'
]
}
]
await prompt(listQuestions).then((answers: any) => {
console.log(JSON.stringify(answers, null, ' '))
})
// Checkbox
const checkboxQuestions: QuestionCollection = [
{
type: 'checkbox',
message: 'select',
name: 'select',
choices: [
new Separator(' = Choise A = '),
{ name: 'hoge' },
{ name: 'fuga' },
{ name: 'foo' }
],
validate: (answer: any): boolean | string => {
if (answer.length < 1) {
return 'You must choose'
}
return true
}
}
]
await prompt(checkboxQuestions).then((answers: any) => {
console.log(JSON.stringify(answers, null, ' '))
})
}
执行
因为建立项目很麻烦,所以我会用 ts-node 来执行。
$ npx ts-node bin/cli.ts hello test
Hello!! test !!!
? What's your name is_ryo
{
"name": "is_ryo"
}
? What do you like color? red
{
"color": "red"
}
? select hoge, fuga, foo
{
"select": [
"hoge",
"fuga",
"foo"
]
}
最后
我成功地创建了一个简单的交互式CLI。现在我们有了创建CLI的基础,让我们继续制作自己的CLI吧!再见!!!