vue使用plop自动生成模板
-
安装:npm install plop
-
修改vue配置:启动方式
-
package.json
"scripts": { "serve": "vue-cli-service serve", "build": "vue-cli-service build", "plop": "plop" },
-
如果不想修改安装全局plop:npm install -g plop
-
-
vue根目录创建一个plop入口文件:plopfile.js
const routerGenerator = require('./plop-templates/router/prompt'); //指定一个模块目录(根据自己目录)
module.exports = function (plop) {
plop.setGenerator('router', routerGenerator);//引入模块,可以多个
//如果模块多个,启动时,控制台可以选择
};
-
创建一个模块
-
根目录创建一个plop-templates文件夹—>router文件夹
- prompt.js
const { notEmpty } = require('../utils') //自己定义的一个工具方法-后面会说 module.exports = { description: 'generate a controller', //描述这个generate的作用 prompts: [ { type: 'input', // 问题的类型 name: 'pathName', // 问题对应得到答案的变量名,可以在acitons中使用该变量 message: '文件名称', // 在命令行中的问题 validate: notEmpty('pathName') //验证输入的值,notEmpty自定义的工具方法里验证 }, //这里可以多个,代表多个问题,依次执行 /** { type: 'input', // 问题的类型 name: 'pathName2', // 问题对应得到答案的变量名,可以在acitons中使用该变量 message: '文件名称2' // 在命令行中的问题 }**/ ], //执行的动作 actions: (data) => { // 这里可以通过data获取输入的pathname const actions = [ //这里创建一个文件 { type: 'add', // 操作类型 添加文件 path: `src/${data.pathName}.js`, //添加的文件的路径 templateFile: 'plop-templates/router/index.hbs', //模版文件的路径(***这里就是想要生成的模板) data: { form: [{label:"值",key:"p1"}], isDel:true } } ] return actions } }
- 模板index.hbs
<template> <div class="center"> <el-row> <el-button type="primary" size="mini" @click="add{{Api}}">新键</el-button> <el-button type="danger" size="mini" @click="delete{{Api}}">删除</el-button> </el-row> <el-table @selection-change="selectTable" border v-loading="loading" :data="tableData" stripe style="width: 100%"> <el-table-column type="index" width="50" label="序号" /> <el-table-column type="selection" width="55" /> {{#each form}} <el-table-column prop="{{this.key}}" label="{{this.label}}" width="180"> </el-table-column> {{/each}} <el-table-column fixed="right" label="操作" width="250"> <template slot-scope="scope"> <el-button @click="showEdit(scope.row)" type="primary" size="mini">查看</el-button> {{#if isDel}} <el-button type="danger" size="mini" @click="delete{{Api}}(scope.row)">删除</el-button> {{/if}} </template> </el-table-column> </el-table> </div> </template> <script> export default { data() { return { } }, mounted() { }, methods: { } } </script> <style scoped lang="scss"> </style>
- #earch:循环数组,并默认this属于子项
- #if:条件语句
- 具体 Express模板引擎定制—hbs 的资料
-
plop-templates文件夹->utils.js
//简单的验证下,输入的值 //返回string:代表有错误信息,会显示再控制台 //热会true:代表通过 exports.notEmpty = (name) => { return (v) => { if (!v || v.trim === '') { return `${name}为必填项` } else { return true } } }
-
最后通过npm run plop 生成