低代码-H5落地页平台探索

效果:在 vue 应用中通过拖拉拽,生成一个 html 页面

相关技术:

  • 前端::vue,ejs,webpack
  • 后端:eggjs,mongo
  • 部署:docker

流程:用户在落地页配置后台,选择组件并进行组件的属性配置 json,通过 webpack 打包结合模板引擎,生成出各种复杂的页面。

V1.0

模板渲染

ejs 模板+数据 = html 网页

落地页后台:用户配置组件信息,生成 json 数据

node 后端:模板加对应 json 数据,生成静态 html

优点:

  • seo 友好
  • 纯 html,性能较好

缺点:

  • ejs 模板管理复杂,难以模块化分离
  • 开发组件,需要同时维护后台和模板两份代码
  • 只适合简单页面,不适合页面逻辑、交互复杂场景

art-template

art-template 完全兼容 ejs 语法,并进行了更多扩展,类似于 typescript 和 JavaScript 关系,性能测试和接近原生 ejs

用于拆分组件,如把 button、img 等拆分为单独一个文件,在主模板中引入,并可传入变量:

// index.html 引入 img 组件。并传入变量

{{include  './components/img.html'  toChildData}}



// img.html

{{set pros= $data}}

<div class="img-item">
    <img  src="{{pros.url}}">
</div>

art-template 中文文档

V2.0

Vue 生成简单 Vue 应用

通俗的话来讲就是,在 vue 后台配置,通过 webpack 打包,生成一个简单的 vue 应用

ejs 拼接方式打包一个简易 vue 应用

image.png

通过 webpack 打包  engine.js、plugins.js,通过 ejs 模板插值方式,嵌入到页面中,注意资源引用顺序,plugins.js 在前面是因为需要提前注册号组件,不然  engine.js 会报错

1. engine.js

导入 engine 模板,并挂载早 #app 上

image.png

2. plugins.js

通过 require.context 引入模板文件,并通过 window 挂载出去,给下一步  engine.vue 使用

image.png

3. engine.vue

通过 window 可以拿到注入到页面上的页面数据,用通过 component 动态组件,渲染出配置的组件

image.png

4. webpack-dev-server

在生产环境,是按需打包组件的,每次生成页面都会进行一次打包生成具体的 html 文件

在预览环境,即用户编辑模式,是没有必要每次都打包的,可以通过  webpack-dev-server ,结合模板引擎,实时急速的渲染页面

V3.0(规划中)

Vue 生成复杂 Vue 应用

1. ssr

因为打包出的是一个 vue 应用,seo 较不友好,puppeteer 预请求渲染页面是一种方案,但性能不是很好且很多坑。终极方案还是得 ssr

Vue 搭建 SSR 应用

2. 组件嵌套

所有组件都可嵌套开发和维护会非常复杂,想法是单独开一个容器组件,只对该容器组件进行嵌套相关处理

3.  页面状态

复杂页面场景:如登录完后跳转其他页面,目前处理只是简单的组件隐藏,数据管理很复杂。引入 vuex,router 应该是终极方案