如果对你有帮助的话,可以帮我点个 Star !!! github.com/CyberFei/puzzle
Puzzle 是基于 Vue 和 Webpack4 实现的一种项目结构;业务模块可以像拼图一样与架构模块组合,形成不同的系统,而这一切都是可以在生产环境热插拔的;这意味着你可以随时向你的系统添加新的功能模块,甚至改版整个系统,而不需要停掉它。
核心:支持生产环境模块热插拔
支持业务模块的灵活组合
基座作为基座模块,也支持多个并存(这意味着你可以很轻松的进行灰度测试)
umd
模块的方式用 webpack
打包出来window
对象上附加该模块对象安装依赖
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"
通过上述操作打包出的模块,可以直接新增到生产环境或者替换生产环境对应应模块
此文件夹内包含 webpack 所有打包配置文件
config.js:项目配置,用于生产环境配置
index.html:HTML 模版
架构代码
基座模块代码,多个基座模块并列放置
业务模块代码,多个业务模块并列放置
主要用于放置静态资源,将会直接复制到生产环境 static 文件夹
由npm run dll
生成的第三方库和公共代码等
生产环境代码按照一定结构放置,可以自由升级替换对应模块
由 npm run core
生成的架构代码
由 npm run frame
生成的基座模块代码
由 npm run puzzle
生成的业务模块代码
静态资源,包含打包生成的第三方库和公共代码等
此架构仅作为日常工作的一个总结,具体业务场景,可以进行修改,基座模块等可以进行自由发挥;业务模块返回的信息也可以按照需求增加;只要各个模块遵循一定标准,并在 core 中进行统一处理,均可以达到可插拔的效果。
具体可以看项目代码,方便的话可以给个 star github.com/CyberFei/puzzle
1
CyberFei 2019-06-03 17:36:33 +08:00
目前基座是一个简单的 demo,后面我会更新一个功能完整的基座
|
2
DonaldY 2019-06-03 17:42:14 +08:00
怎么感觉只是生产环境支持热更新?
我要是前端,我应该不会用这个。 |
4
baixiaoyu2997 2019-07-08 15:14:03 +08:00
公司的微前端项目,每个模块关闭时,或者新打开一个模块时都会刷新一下页面,这是为什么
|
5
duanzs 2019-07-09 17:32:48 +08:00
看你的描述和我的需求简直一模一样
我可以这么理解吗:基座模块相当于 vscode,业务模块相当于 vscode 的一个个小模块,所以:业务模块更新不需要整个项目更新重新打包发布<==>vscode 插件更新不需要 vscode 重新打包更新 |
7
squallvince 2019-08-19 14:49:38 +08:00
对这个很感兴趣,可惜 vue 没研究过。想研究下这个把 ssr 加进去不知道楼主有没有建议?
|
8
1340641314 2020-05-30 23:07:08 +08:00
|