博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
基于 Webpack4 的可插拔式微前端架构 - Puzzle
阅读量:6415 次
发布时间:2019-06-23

本文共 2000 字,大约阅读时间需要 6 分钟。

对你有所帮助的话,可以给个star

项目演示环境(项目在谷歌云上,最近不太稳定):

什么是 Puzzle

Puzzle 是基于 Vue 和 Webpack4 实现的一种项目结构;业务模块可以像拼图一样与架构模块组合,形成不同的系统,而这一切都是可以在生产环境热插拔的;这意味着你可以随时向你的系统添加新的功能模块,甚至改版整个系统,而不需要全量替换整个项目。

此外当多个项目使用此架构开发,即使模块是由不同的项目打包出来的,也可以在生成环境进行快速组合,模块可以非常简单的进行复用。

特点

  • 核心:支持生产环境模块热插拔

  • 支持业务模块的灵活组合

  • 基座作为基座模块,也支持多个并存(这意味着你可以很轻松的进行灰度测试)

如何做到的

  1. 将基座/业务模块以umd模块的方式用 webpack 打包出来
  2. 通过 对这些模块进行挂载,会在 window 对象上附加该模块对象
  3. 通过动态路由的方式将该对象加载到架构中

运行项目

开发环境

安装依赖

npm install复制代码

构建第三方依赖

npm run dll复制代码

运行

npm start复制代码

生产环境

安装依赖

npm install复制代码

构建第三方依赖

npm run dll复制代码

构建,在这步你可以选择需要打包的基座模块和业务模块方便进行灵活组合

npm run build复制代码

热插拔相关

前端项目根据后端菜单请求进行模块加载,如本项目中后端请求返回格式为(数据来自阿里云):

[  {    id: "elastic",    name: "弹性计算",    leaf: false,    children: [      {        id: "ecs",        name: "云服务器 ECS",        leaf: true,        page: "/ecs",        puzzle: "elastic"      },      // ...    ],    icon: "aperture",    puzzle: "elastic"  },  {    id: "database",    name: "数据库",    leaf: false,    children: [    	// ...    ],    icon: "aperture",    puzzle: "database"  },  // ...]复制代码

规定以第一级目录为模块目录(这里看自己的需求可以对项目进行修改)

固模块 ID 为 elastic、database 等,系统会在生产环境对所有子系统的入口文件进行请求,尝试加载模块,并生成路由;

所以通过不同用户的不同业务模块返回结果,可以进行不同模块的加载,从而进行权限控制;

同理通过不同用户的不同基座模块返回结果,可以进行不同基座的加载,从而进行灰度测试等操作(目前系统所用基座是写在public/config.js中,固此条仅作参考,项目本身可以自由发挥);

单独打包架构

npm run core复制代码

单独打包基座模块

npm run frame --name="xxx"复制代码

单独打包业务模块

npm run puzzle --name="xxx"复制代码

通过上述操作打包出的模块,可以直接新增到生产环境或者替换生产环境对应模块

代码结构

开发环境结构

config

此文件夹内包含webpack所有打包配置文件

public

config.js:项目配置,用于生产环境配置

index.html:HTML 模版

src -> core

架构代码

src -> frames

基座模块代码,多个基座模块并列放置

src -> puzzles

业务模块代码,多个业务模块并列放置

static

主要用于放置静态资源,将会直接复制到生产环境static文件夹

static -> dll

npm run dll生成的第三方库和公共代码等

生产环境结构

生产环境代码按照一定结构放置,可以自由升级替换对应模块

core

npm run core 生成的架构代码

frames

npm run frame 生成的基座模块代码

puzzles

npm run puzzle 生成的业务模块代码

static

静态资源,包含打包生成的第三方库和公共代码等

PS

此架构仅作为日常工作的一个总结,具体业务场景,可以进行修改,基座模块等可以进行自由发挥;业务模块返回的信息也可以按照需求增加;只要各个模块遵循一定标准,并在core中进行统一处理,均可以达到可插拔的效果。

具体可以看项目代码,方便的话可以给个star,

转载于:https://juejin.im/post/5cf4a1466fb9a07eab686a8f

你可能感兴趣的文章
腾讯Hermes设计概要——数据分析用的是列存储,词典文件前缀压缩,倒排文件递增id、变长压缩、依然是跳表-本质是lucene啊...
查看>>
小程序模板嵌套以及相关遍历数据绑定
查看>>
Systemd入门教程:命令篇(转)
查看>>
java随机范围内的日期
查看>>
spring事务学习(转账案例)(二)
查看>>
[官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机
查看>>
http协议与http代理
查看>>
【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例...
查看>>
Redis+Spring缓存实例
查看>>
Storm集群安装详解
查看>>
centos7.x搭建svn server
查看>>
原码编译安装openssh6.7p1
查看>>
项目实战:自定义监控项--监控CPU信息
查看>>
easyui-datetimebox设置默认时分秒00:00:00
查看>>
蚂蚁分类信息系统5.8多城市UTF8开源优化版
查看>>
在django1.2+python2.7环境中使用send_mail发送邮件
查看>>
“Metro”,移动设备视觉语言的新新人类
查看>>
PHP源代码下载(本代码供初学者使用)
查看>>
Disruptor-NET和内存栅栏
查看>>
Windows平台ipod touch/iphone等共享笔记本无线上网设置大全
查看>>