【常用的Npm包】Inquirer

Inquirer.js可以理解成就是给输入命令行的用户提供一个好看的界面,提供一下功能:

  • 有错误反馈;
  • 向用户提问;
  • 解析输入;
  • 校验回答;
  • 能在用户输入的时候提供友好的提示。
安装
yarn add inquirer --save-dev
使用

我们简易的模仿一下vue-cli:

  • 先问用户是选用默认的预设,还是自己定义,如果是默认则退出,如果自定义,则进入下一步;
  • 让用户多选预设,如babeltypescript等。

prompt方法中提供配置项,then会在用户回答完所有问题后执行,catch则是报出异常:

var inquirer = require('inquirer');
inquirer.prompt([])
	 	.then((answers) => { console.log(JSON.stringify(answers, null, '  ')); })
		.catch((error) => {console.log(error);} )

prompt是一个对象数组,对象主要包含以下几种配置:

  • type: 类型,主要类型有input、number、confirm、list、rawlist、expand、checkbox、password、editor
  • name:可以理解成当前回答的变量名;
  • message:问题描述;
  • default:问题的默认值;
  • choice:问题选项;
  • validate:回答的校验器;
  • filter:回答的过滤器;
  • transformer:接收用户输入,回答散列和选项标志,并返回一个转换后的值显示给用户。
  • when:是否应该问这个问题;
  • PageSize:控制选项显示的个数,就是是否当前最多显示多少个选项,如果超过则需要向下才能显示更多;
  • prefix:更改默认的前缀消息。
  • suffix:更改默认后缀消息。
  • askAnswered:如果答案已经存在,就必须提出问题。
  • loop:是否启用列表循环。
var inquirer = require('inquirer');
inquirer.prompt([{
  type: 'list',
  name: 'preset',
  message: 'Please pick a preset:',
  choices: ['default(babel, eslint)', 'Manually select feature'],
  filter: function(val){
    return val.toLowerCase();
  }
}, {
  type: 'checkbox',
  name: 'features',
  message: 'Checkout the feature needed for you project:',
  choices: [{
    name: 'Babel',
  }, {
    name: 'TypeScript',
  },{
    name: 'Progressive Web App (PWA) Support',
  }, {
    name: 'Router',
  },{
    name: 'Vuex',
  }, {
    name: 'CSS Pre-processors',
  }, {
    name: 'Linter / Formatter',
  }, {
    name: 'Unit Testing',
  }, {
    name: 'E2E Testing',
  }],
  pageSize: 9,
  validate: function(answer){
    if(answer.length < 1){
      return 'You must choose at least one topping.';
    }

    return true;
  }
}]).then(answers => {
  console.log(JSON.stringify(answers, null, '  '));
}).catch(error => {
  console.log(error);
})

再进行条件显示:

var inquirer = require('inquirer');
function exitPreset(){
  inquirer.prompt([{
    type: 'list',
    name: 'preset',
    message: 'Please pick a preset:',
    choices: ['default(babel, eslint)', 'Manually select feature'],
    filter: function(val){
      return val.toLowerCase();
    },
  }]).then((answers) => {
    if(answers.preset === 'manually select feature'){
      exitFeature();
    }else {
      console.log(JSON.stringify(answers, null, '  '));
    }
  })
}

function exitFeature(){
  inquirer.prompt([{
    type: 'checkbox',
    name: 'features',
    message: 'Checkout the feature needed for you project:',
    pageSize: 9,
    choices: [{
      name: 'Babel',
    }, {
      name: 'TypeScript',
    },{
      name: 'Progressive Web App (PWA) Support',
    }, {
      name: 'Router',
    },{
      name: 'Vuex',
    }, {
      name: 'CSS Pre-processors',
    }, {
      name: 'Linter / Formatter',
    }, {
      name: 'Unit Testing',
    }, {
      name: 'E2E Testing',
    }],
    default: ['Babel', 'Linter / Formatter'],
    validate: function(answer){
      if(answer.length < 1){
        return 'You must choose at least one topping.';
      }
      return true;
    }
  }]).then((answers) => {
    if(answers.preset === 'Manually select feature'){
      exitFeature();
    }else {
      console.log(JSON.stringify(answers, null, '  '));
    }
  })
}

function main(){
  exitPreset();
}

main();

在这里插入图片描述

在这里插入图片描述

更多配置查看: Inquirer.js

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值