当前位置:首页 > 科技  > 软件

Node.js 中的交互式命令行:玩转 Inquirer.js

来源: 责编: 时间:2024-04-26 17:33:38 308观看
导读嘿,会Node.js 的小伙伴们!今天咱们来聊聊一个超级实用的 Node.js 库——inquirer.js。如果你想要让你的命令行工具变得交互式,那这个库绝对是你的不二之选。它能让你轻松创建出美观、易用的文本界面,让用户的输入体验更上

嘿,会Node.js 的小伙伴们!今天咱们来聊聊一个超级实用的 Node.js 库——inquirer.js。如果你想要让你的命令行工具变得交互式,那这个库绝对是你的不二之选。它能让你轻松创建出美观、易用的文本界面,让用户的输入体验更上一层楼。83m28资讯网——每日最新资讯28at.com

安装 Inquirer.js

安装起来也是分分钟的事,用 npm 或 yarn 都可以:83m28资讯网——每日最新资讯28at.com

npm install inquirer

或者83m28资讯网——每日最新资讯28at.com

yarn add inquirer

快速上手

安装完了,咱们就可以开始玩耍了。先来个简单的示例,看看 inquirer.js 是怎么用的:83m28资讯网——每日最新资讯28at.com

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 是咱们要问用户的问题。83m28资讯网——每日最新资讯28at.com

丰富的问题类型

inquirer.js 提供了一大堆问题类型,满足各种不同的需求:83m28资讯网——每日最新资讯28at.com

输入(Input)

就是普通的文本输入。83m28资讯网——每日最新资讯28at.com

{ type: 'input', name: 'name', message: '你的名字是啥?',}

密码(Password)

和输入一样,但输入的内容不会显示出来。83m28资讯网——每日最新资讯28at.com

{ type: 'password', name: 'password', message: '密码多少呀?',}

确认(Confirm)

用户可以通过输入 y 或 n 来回答“是”或“否”。83m28资讯网——每日最新资讯28at.com

{ type: 'confirm', name: 'continue', message: '咱们继续吗?',}

列表(List)

让用户从列表里挑一个。83m28资讯网——每日最新资讯28at.com

{ type: 'list', name: 'theme', message: '选个主题呗:', choices: ['亮堂的', '暗夜的', '自定义的'],}

下拉列表(Expand)

下拉列表,用户可以用方向键选择多个选项。83m28资讯网——每日最新资讯28at.com

{ type: 'expand', name: 'abilities', message: '超能力选哪个?', choices: [  {     key: 'p',     name: '力大无穷',     value: 'power',  },  {     key: 's',     name: '快如闪电',     value: 'speed',  },   // 更多选项...],}

编辑器(Editor)

这个厉害了,让用户在外部编辑器里写东西。83m28资讯网——每日最新资讯28at.com

{  type: 'editor',  name: 'bio',  message: '来,写个自我介绍:',}

处理用户的回答

inquirer.prompt() 方法返回一个 Promise,用户一提交答案,Promise 就会带着所有答案的对象来解析。你可以拿这些答案去做各种酷炫的事。83m28资讯网——每日最新资讯28at.com

inquirer.prompt(questions).then(answers => {  // 用 answers 对象干点啥  console.log('用户名:', answers.username);});

动态提问

有时候,你可能想问的问题取决于用户之前的回答。inquirer.js 支持这种智能模式,用 when 属性就能搞定。83m28资讯网——每日最新资讯28at.com

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 的回答。83m28资讯网——每日最新资讯28at.com

装饰你的命令行

inquirer.js 还让你能通过 prefix 属性来加个前缀,或者用 transformer 函数来美化显示给用户的答案。83m28资讯网——每日最新资讯28at.com

{  type: 'input',  name: 'name',  message: '叫啥?',  prefix: '称呼:',  transformer: input => `你好啊,${input}!`,}

和其他 Node.js 工具一起玩

inquirer.js 可以和其他 Node.js 工具一起用,比如和 cross-spawn 模块搭配,根据用户的回答执行不同的命令。83m28资讯网——每日最新资讯28at.com

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 的基本用法,现在你应该对这个库有个大概的了解了。83m28资讯网——每日最新资讯28at.com

83m28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-85867-0.htmlNode.js 中的交互式命令行:玩转 Inquirer.js

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Rust 机器学习,一定要知道的这些库,可以替代 Python 库了

下一篇: 写了个插件,一口气解决项目中所有精度丢失问题!

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 俄罗斯:将审查iPhone等外国公司设备 保数据安全

    iPhone和特斯拉都属于在各自领域领头羊的品牌,推出的产品也也都是数一数二的,但对于一些国家而言,它们的产品可靠性和安全性还是在限制范围内。近日,俄罗斯联邦通信、信息技术
  • 6月iOS设备性能榜:M2稳居榜首 A系列只能等一手3nm来救

    没有新品发布,自然iOS设备性能榜的上榜设备就没有什么更替,仅仅只有跑分变化而产生的排名变动,毕竟苹果新品的发布节奏就是这样的,一年下来也就几个移动端新品,不会像安卓厂商,一
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • 认真聊聊东方甄选:如何告别低垂的果实

    来源:山核桃作者:财经无忌爆火一年后,俞敏洪和他的东方甄选依旧是颇受外界关心的“网红”。7月5日至9日,为期5天的东方甄选“甘肃行”首次在自有App内直播,
  • 华为发布HarmonyOS 4:更好玩、更流畅、更安全

    在8月4日的华为开发者大会2023(HDC.Together)大会上,HarmonyOS 4正式发布。自2019年发布以来,HarmonyOS一直以用户为中心,经历四年多的发展HarmonyOS已
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • OPPO Reno10 Pro英雄联盟定制礼盒公布:萨勒芬妮同款配色梦幻十足

    5月24日,OPPO推出了全新的OPPO Reno 10系列,包含OPPO Reno10、OPPO Reno10 Pro和OPPO Reno10 Pro+三款新机,全系标配了超光影长焦镜头,是迄今为止拍照
Top