通用交互式命令行用户界面的集合。
安装
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 node
const 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);
}
})
})
})
})