前端 html自动生成,前端工程化-自动生成页面
前言
我们的项目是基于vue-cli搭建的,每次需要新加一个页面需要操作以下步骤:
在views文件夹下面新建一个文件夹,用来存放新页面的.vue文件。
需要在routes.js文件里面新添加一个路由。
按照上述操作以后,才可以正常访问新添加的页面,之后才开始对新页面进行正常开发。但是这样的机械化步骤我们完全可以用代码帮我们执行,更进一步,对于一些简单的页面,我们甚至可以一键生成页面,包括从后端请求数据等操作。
自动生成页面
我们可以按照模板的方式生成想要的页面,我这里说两种页面,
一种是什么都没有的空白页,生成空白页就相当于是初始化一个新页面然后接着开发。
另一种是生成一些比较固定布局的简单页面,比如我们的业务中经常会有需求是写一个页面,就一个表格展示一下后端返回的数据,顶多就是再加个删除,添加和编辑。像这种简单的页面,完全可以使用代码自动生成。
我这里主要是使用配置文件的方式来设置我们的模板。
生成表格页
为了操作方便,我们可以在项目根目录新建一个auto-build-page文件夹用来存放我们之后要写的所有代码和模板。
编辑配置文件
我们在auto-build-page文件夹下新建一个addConfig.js文件,里面存放我们定义的配置:
var addConfig = [
{
// 测试生成表格页
open: true, // 参与生成 false表示改配置不参与生成页面
helloworld: false, // 是否是空白页
desc: '自动生成表格页', // 页面描述
name: 'autoTablepage', // 页面名称
getlist: {
// 表格数据请求相关
method: 'GET',
url: 'http://test.req/getlist',
},
},
{
// 测试生成空白页
open: true,
helloworld: true,
desc: '自动生成空白页面',
name: 'autoHellopage',
},
]
module.exports = addConfig
复制代码
配置的含义在注释中已经详细说明了
按照配置文件生成页面.vue文件
我们在auto-build-page文件夹下新建一个template-table.vue文件,存放我们的表格页模版,我们使用的是element-ui组件:
%title%
{{scope.row[scope.column.property]}}
const CONFIG={
method:"%method%",
geturl:"%geturl%",
};
export default {
data() {
return {
tableData: [],
tableDataHeader: [],
};
},
methods: {
formatOther(row) {
return JSON.stringify(row, null, 2);
},
getList(params={}) {
axios({
method: CONFIG.method,
url: CONFIG.geturl,
data: params
}).then(res=>{ // 后端返回的数据需要按照这种格式
console.log(res);
this.tableData=res.data.tableData;
this.tableDataHeader=res.data.tableDataHeader;
});
}
},
mounted(){
this.getList();
}
};
复制代码
可以看见表格页模板里面有很多两个%包起来的变量,这是等下我们需要按照配置文件进行替换的变量。
我们继续在auto-build-page文件夹下新建一个build-page.js文件,里面写的是整个自动化操作的代码
var addConfig = require('./addConfig')
var fs = require('fs')
var path = require('path')
var shell = require('shelljs')
shell.echo('>>>>>>')
shell.echo('开始新建页面')
addConfig.forEach((ele) => {
if (ele.open) {
buildPage(ele)
}
})
复制代码
我们循环配置文件里面的配置,支持生成多个页面。对文件的操作我们直接使用node的fs模块完成。
读取模板文件,并根据配置文件,对模板文件里面的变量进行替换:
function buildPage(config){
var paths = path.resolve(`./src/views/${config.name}`)
shell.echo('页面地址:' + paths)
mkdirSync(paths, function(){
var str = ''
if (config.helloworld) {
// 新建空白页,读取空白页模版
str = handleStr(
readF(path.resolve('./template-helloworld.vue')),
config
)
} else {
str = handleStr(
readF(path.resolve('./template-table.vue')),
config
)
}
// 写入文件
writeF(paths + '/index.vue', str)
shell.echo('开始新增路由……')
addRou(`./views/${config.name}/index.vue`, config)
})
}
复制代码
根据配置文件替换%包起来的变量:
function handleStr(str, config){
if (config.helloworld) {
return str
}
str = str.replace('%title%', config.desc)
str = str.replace('%method%', config.getlist.method)
str = str.replace('%geturl%', config.getlist.url)
return str
}
复制代码
添加路由
接下来是添加路由,在此之前我们还是需要添加一个路由的模板文件,在auto-build-page文件夹下新建一个template-route.txt文件:
{
path: '%path%',
component: Home,
name: '%name%',
redirect: { path: '%repath%' },
children: [
{
path: '%repath%',
component: (resolve) =>
require(['%requirepath%'], resolve),
name: '%name2%'
}
]
},
复制代码
里面根据我们路由规则,写入模板。
回到build-page.js文件,我们继续书写添加路由的操作,我们先读取路由模板:
function addRou(paths, config){
var templateStr = handleRouStr(
readF(path.resolve('./auto-build-page/template-route.txt')),
config,
paths
)
// 添加到路由文件
addToConf(templateStr)
}
function handleRouStr(str, config, paths){
str = str.replace(/%path%/g, `/${config.name}`)
str = str.replace(/%name%/g, config.desc)
str = str.replace(/%name2%/g, `${config.desc}首页`)
str = str.replace(/%repath%/g, `/${config.name}/index`)
str = str.replace(/%requirepath%/g, paths)
return str
}
复制代码
将路由添加到vue项目src下的routes.js文件里面:
function addToConf(str){
str += '// add-flag' // 添加的位置标记
var confStr = handleConfRouStr(readF(path.resolve('./src/addRoute.js')), str)
writeF(path.resolve('./src/addRoute.js'), confStr)
shell.echo('路由添加成功!')
shell.echo('结束生成页面')
shell.echo('>>>>>>')
}
function handleConfRouStr(ori, str){
ori = ori.replace('// add-flag', str)
return ori
}
复制代码
我这里是为了避免原来的routes.js文件,我新建了一个addRoute.js文件,然后在routes.js文件中引入,和原来的合并以下即可。
routes.js:
// 自动生成页面--自动添加路由
import addRoute from './addRoute'
let routes = []
let lastRoute = routes.concat(addRoute)
export default lastRoute
复制代码
addRoute.js:
const addRoute = [
// add-flag
// 不能删除
]
export default addRoute
复制代码
接下来我们需要在package.json文件里面的scripts里面添加运行的脚本,这样,只需要执行npm run 命令就可以运行自动生成的操作:
复制代码
"scripts": {
"dev": "vue-cli-service serve",
"build": "vue-cli-service build",
"bpage": "node ./auto-build-page/build-page.js"
},
现在执行npm run bpage 控制台输出:
>>>>>>
开始新建页面
页面地址:./src/views/autoTablepage
页面地址:./src/views/autoHellopage
开始新增路由……
路由添加成功!
结束生成页面
>>>>>>
复制代码
生成空白页
只需要添加一个空白页的模板就行,在auto-build-page文件夹下新建一个template-helloword.vue文件:
hello world
data() {
return {};
},
methods: {},
mounted() {}
};
复制代码
前端 html自动生成,前端工程化-自动生成页面相关推荐
- node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太 ...
- 自动生成文章的html,文章自动更新工具|自动生成文件|自动伪原创|文章自动插入关键词工具...
概念网络发布一款自动更新文章的工具, 该套工具可用概念的文章站程序, 概念的发布站程序, 概念的企业站程序, 只要在服务器一直开着这个工具, 工具会更具配置文件的配置, 每天定时的更新网站的文章, 文 ...
- 软件测试作业8:分析自动售货机软件例子生成的判定表图例
作业8 1.分析 Chap.5 (Lec.19) 自动售货机软件例子生成的判定表图例的第6列和第23列,分别给出: (1).输入条件的自然语义陈述: (2).输出结果的自然语义陈述: (3).用命题逻 ...
- javamail发送html正文文件_Python实现-生成测试报告amp;自动邮件发送
之前单独介绍了生成测试报告和自动发送邮件,那么现在把两者整合到一起:生成测试报告后然后自动发送邮件,这里只是简单的整合实现功能,其实还可以优化的,先用吧,后面再慢慢优化 先看下目录,其实目录还是一样, ...
- SpringBoot集成Swagger2自动生成友好的RestApi测试页面及文档
springBoot集成swagger2 水煮鱼又失败了 https://www.jianshu.com/p/002ce2f26103 1 背景 springBoot作为微服务首选框架,为其他服务提供 ...
- angelajs中ajax,前端测试数据怎么利用Mock.js进行生成
前端测试数据怎么利用Mock.js进行生成 发布时间:2020-12-14 14:17:47 来源:亿速云 阅读:108 作者:Leah 本篇文章为大家展示了前端测试数据怎么利用Mock.js进行生成 ...
- Jhipster生成前端为Vue的项目引入Element-UI
Jhipster生成前端为typescript 的Vue的项目引入Element-UI 在main.ts /* 引入element-ui */ import * as ElementUI from ' ...
- CodeFun-UI 设计稿智能生成前端源代码
现在市场对前端开发工程师的要求越来越高,前端还原设计稿已经是最基本且不可避免的力气活了.在前端领域,想提升,就需要不断的学习.但是学习的时间哪里来呢?提高工作效率是正解,让你的24小时更有意义. Co ...
- Art Blocks:生成艺术的自动售货机
撰文:程天一 来源:海外独角兽 代码和软件已经占据了我们的生活,但是使用代码创作出的生成艺术在过去很多年中始终被低估.2021 年夏天开始的 NFT 和 Art Blocks 热潮改变了这一点. Ar ...
- 基于.Net Core Web MVC的图书查询系统——第四章,添加模型并使用EF Core生成基架自动生成控制器和视图
基于.Net Core Web MVC的图书查询系统 第一章,.Net Core Web MVC配置身份验证和注册登录功能并修改默认页面 第二章,.Net Core Web MVC配置邮件发送服务 第 ...
最新文章
- python基础知识面试题-Python 基础面试题总结
- 如何使用Java Enum
- Debian 3.1 (Sarge) 正式发布,Knoppix也升级到最后一个单CD版3.9
- web工程中集成cas单点登录
- php 汉字转拼音类,PHP汉字转换拼音的类_php
- drools dmn_Drools DMN最新开源引擎性能改进
- 深度学习修炼(二)——数据集的加载
- 【OpenCV 例程200篇】89. 带阻滤波器的传递函数
- mysql+字段+删除数据库表,MySQL命令行删除表中的一个字段
- Mac可读可写remount硬盘
- python定时重新初始化类_如何重新初始化类对象
- 学习:SQL Server的复合索引学习(转)
- python中的as是什么意思_python中as用法实例分析
- 浪潮财务软件遇到问题
- nessus下载后更新插件问题新的解决方法2020
- 安装win10虚拟机遇到的坑
- E45: ‘readonly‘ option is set (add ! to override)解决办法
- Appium服务器初始化参数(Capability)
- java计算机毕业设计在线交友系统2021源码+mysql数据库+系统+lw文档+部署
- CSS单位之vw、vh、vmin、vmax、%
热门文章
- 贝索斯要卸任 亚马逊换CEO!!!
- graphlan/iTOL画进化树记录
- elasticsearch报错org.elasticsearch.discovery.MasterNotDiscoveredException: null
- windows7系统重装的步骤,电脑重装win7
- 看图学网络 一 网络的组成
- Go Playground exercise
- 几种常见的十进制代码(笔记)
- CentOS7安装WPS中文字体问题
- Java图片处理:ico格式转PNG/JPG等格式
- RDIFramework.NET V3.3 WinForm版新增订单管理主从表事例