嘿,会Node.js 的小伙伴们!今天咱们来聊聊一个超级实用的 Node.js 库——inquirer.js。如果你想要让你的命令行工具变得交互式,那这个库绝对是你的不二之选。它能让你轻松创建出美观、易用的文本界面,让用户的输入体验更上一层楼。
安装起来也是分分钟的事,用 npm 或 yarn 都可以:
npm install inquirer
或者
yarn add inquirer
安装完了,咱们就可以开始玩耍了。先来个简单的示例,看看 inquirer.js 是怎么用的:
const inquirer = require('inquirer');const questions = [{ type: 'input', name: 'username', message: '嘿,你叫啥呀?',},{ type: 'password', name: 'password', message: '密码悄悄告诉我:',},];inquirer.prompt(questions).then(answers => { console.log('用户名:', answers.username); console.log('密码:', answers.password);});
这段代码里,咱们定义了两个问题:用户名和密码。type 参数告诉 inquirer.js 我们想要的输入类型,name 是问题的答案名称,message 是咱们要问用户的问题。
inquirer.js 提供了一大堆问题类型,满足各种不同的需求:
就是普通的文本输入。
{ type: 'input', name: 'name', message: '你的名字是啥?',}
和输入一样,但输入的内容不会显示出来。
{ type: 'password', name: 'password', message: '密码多少呀?',}
用户可以通过输入 y 或 n 来回答“是”或“否”。
{ type: 'confirm', name: 'continue', message: '咱们继续吗?',}
让用户从列表里挑一个。
{ type: 'list', name: 'theme', message: '选个主题呗:', choices: ['亮堂的', '暗夜的', '自定义的'],}
下拉列表,用户可以用方向键选择多个选项。
{ type: 'expand', name: 'abilities', message: '超能力选哪个?', choices: [ { key: 'p', name: '力大无穷', value: 'power', }, { key: 's', name: '快如闪电', value: 'speed', }, // 更多选项...],}
这个厉害了,让用户在外部编辑器里写东西。
{ type: 'editor', name: 'bio', message: '来,写个自我介绍:',}
inquirer.prompt() 方法返回一个 Promise,用户一提交答案,Promise 就会带着所有答案的对象来解析。你可以拿这些答案去做各种酷炫的事。
inquirer.prompt(questions).then(answers => { // 用 answers 对象干点啥 console.log('用户名:', answers.username);});
有时候,你可能想问的问题取决于用户之前的回答。inquirer.js 支持这种智能模式,用 when 属性就能搞定。
const questions = [ { type: 'confirm', name: 'hasAccount', message: '有账户不?', }, { type: 'input', name: 'username', message: '用户名是啥?', when: answers => answers.hasAccount }, { type: 'input', name: 'email', message: '邮箱地址呢?', when: answers => !answers.hasAccount }];
在这个例子里,用户名的输入框会不会显示,取决于用户对 hasAccount 的回答。
inquirer.js 还让你能通过 prefix 属性来加个前缀,或者用 transformer 函数来美化显示给用户的答案。
{ type: 'input', name: 'name', message: '叫啥?', prefix: '称呼:', transformer: input => `你好啊,${input}!`,}
inquirer.js 可以和其他 Node.js 工具一起用,比如和 cross-spawn 模块搭配,根据用户的回答执行不同的命令。
const { spawn } = require('cross-spawn');inquirer.prompt([ { type: 'list', name: 'action', message: '想干点啥?', choices: ['装点依赖', '跑个测试', '撤了'], },]).then(answers => { const command = answers.action === '装点依赖' ? 'npm install' : 'npm test'; spawn.sync(command, [], { stdio: 'inherit' });});
inquirer.js 是一个功能超群的库,能让你的命令行工具变得既强大又用户友好。无论是简单的数据收集,还是复杂的多步骤交互,inquirer.js 都能帮你搞定。今天咱们学了 inquirer.js 的基本用法,现在你应该对这个库有个大概的了解了。
本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-85867-0.htmlNode.js 中的交互式命令行:玩转 Inquirer.js
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com