通用交互式命令行用户界面的集合。
安装
npm install inquirer
问题参数
- type:(String)表示提问的类型,包括:input, confirm, list, rawlist, expand, checkbox, password, editor;
 - name: (String)当前问题回答的变量key;
 - message:(String|Function) 问题的描述;
 - default:(String|Number|Boolean|Array|Function) 默认值;未输入任何内容时使用的默认值,或返回默认值的函数。
 - choices: (Array|Function)Choices数组或返回Choices数组的函数。如果定义为函数,则第一个参数将是当前查询程序会话答案。数组值可以是简单的数字、字符串或包含名称(显示在列表中)、值(保存在答案哈希中)和短属性(选择后显示)的对象。choices数组还可以包含分隔符。
 - validate: (Function)对用户的回答进行校验;
 - filter: (Function)对用户的回答进行过滤处理,返回处理后的值;
 - transformer: (Function)对用户回答的显示效果进行处理(如:修改回答的字体或背景颜色),但不会影响最终的答案的内容;
 - when: (Function|Boolean) 根据前面问题的回答,判断当前问题是否需要被回答;
 - pageSize: (Number) 更改使用list、rawList、expand或checkbox时要呈现的行数。
 - prefix:(String) 修改message默认前缀;
 - suffix:(String) 修改message默认后缀。
 - askAnswered: (Boolean) 如果答案已经存在,则强制提示问题。
 - loop: (Boolean) 启用列表循环。默认值:true
 
使用
var inquirer = require(‘inquirer');inquirer.prompt(questions).then(answers => {// TODO})
简单例子
eg1:const promptList = [{type: 'input',name: 'a',message: '页面标题'}];// 询问框问题inquirer.prompt(promptList).then(answers => {// 得到用户答案console.log(answers);})

eg2:const promptList = [{type: 'confirm',name: 'b',message: 'Are you ok?',default: true}];

eg3:const promptList = [{type: 'list',message: '请选择种类:',name: 'c',choices: ['A','B','C'],filter: function (val) {// 使用filter将回答变为小写return val.toLowerCase();}}];

eg4:const promptList = [{type: 'password',name: 'd',message: '请输入密码’,validate:function() {if (val == '') {return '请输入密码';}return true;}}];

eg5:const promptList = [{type: "checkbox",message: "请选择种类:",name: "color",choices: ['a','b','c']}];

npm link
link:到模块目录 npm link 进行全局link使用:到所需要的项目下,可直接使用此模块解除link:npm unlink 模块名
DEMO
templates/jstemp.js
layui.define(function (exports) {layui.use(['element', 'table', 'form', 'admin', 'view', 'laytpl', 'common', 'util'], function () {var element = layui.element,$ = layui.$,table = layui.table,form = layui.form,admin = layui.admin,view = layui.view,laytpl = layui.laytpl,common = layui.common,router = layui.router(),util = layui.util,setter = layui.setter;// 初始化搜索form表form.render();util.event('lay-btn-operation', {})})exports('<%= fileName || "default" %>', {}); //注意,这里是模块输出的核心,模块名必须和use时的模块名一致});
templates/htmltemp.html
<div class="content-container"><div class="container-title"></div><div class="container-title-small" id="listNum"></div><div class="table-container"><!-- 查询区域 --><div class="layui-form layui-form-search" lay-filter="layadmin-search-form"><form><div class="layui-form-item"><div class="layui-inline"><label class="layui-form-label-nowidth">员工职务:</label><div class="inline"><select name="role"><option value="">全部</option><option value="1">列车长</option><option value="2">副列车长</option><option value="3">乘务员</option><option value="4">乘警</option></select></div></div></div><div><input type="button" class="layui-btn" id="search-btn" lay-submit lay-filter="LAY-front-search" value="查询"><input type="reset" class="layui-btn layui-btn-primary" value="重置"></div></form></div><!-- 内容主体区域 --><div class="layui-fluid layui-card"><table id="LAY-table-list" lay-filter="filter-table-list" lay-even lay-skin="nob"></table></div></div></div><script>layui.use('<%= fileName || "default" %>', layui.factory('<%= fileName || "default" %>'));</script>
cli.js
#!/usr/bin/env nodeconst fs = require('fs');const path = require('path');const inquirer = require('inquirer'); // 命令行交互询问const ejs = require('ejs'); // 模版引擎const promptList = [{type: 'input',name: 'fileName',message: '请输入页面文件名称:',validate: function (val) {if (val == '') {return '请输入页面文件名称';}return true;}}, {type: 'input',name: 'filePath',message: '请输入html页面文件路径:',}, {type: 'confirm',name: 'createJs',message: '是否需要所对应的js文件?',default: true}, {type: 'input',name: 'fileJsPath',message: '请输入js文件路径?',default: 'src/controller',when: function(answers) {return answers.createJs;}}];// 询问框问题inquirer.prompt(promptList).then(answers => {// 得到用户答案 根据用户回答的结果生成文件const tmplDir = path.join(__dirname, 'templates'); // 模板目录const destDir = process.cwd(); // 目标目录// 将模板下的文件全部转换到目标目录fs.readdir(tmplDir, (err, files) => {// 得到目录下的所有文件if (err) throw err;files.forEach(file => {// 通过模板引擎渲染文件let suffix = file.substr(file.lastIndexOf('.') + 1); // 文件后缀ejs.renderFile(path.join(tmplDir, file), answers, (err, res) => {if (err) throw err;// 将结果写入目标文件路径if (suffix == 'html') {let htmlPath = path.join(destDir, `src/views/${answers.filePath}`);// 生成文件夹`src/views/${answers.filePath}`.split('/').forEach(d => {basePath += '/' + d;if (!fs.existsSync(basePath)) {fs.mkdirSync(basePath);}})fs.writeFileSync(path.join(destDir, `src/views/${answers.filePath}/${answers.fileName}.html`), res);}if (suffix == 'js' && answers.createJs) {fs.writeFileSync(path.join(destDir, `${answers.fileJsPath}/${answers.fileName}.js`), res);}})})})})
