tiny-engine/docs/solutions/material-sync-solution.md

57 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 物料同步方案
## 方案一 (推荐使用)
通过前端脚本上传编辑好的bundle.json文件。
```shell
pnpm uploadMaterials
```
### 注意事项
1. bundle.json文件内组件版本version字段为必须字段缺少的需要补充不然上传接口报错
2. bundle.json文件内组件版本version与数据库t_component内version不一致时为新增一致为更新也可根据自身需求更改相关代码逻辑
3. .env.local中配置访问后端接口的路径默认java后端路径 http://localhost:9090/material-center/api/component/bundle/create
![注意事项图](./imgs/component_create_code.png '注意事项图')
## 方案二
由于当前情况下物料无法通过页面交互维护,提供一个临时方案,由前端托管物料。
在本地运行时提供nodejs脚本维护物料执行脚本保证mockServer工程和前端工程物料的同步。如果启动了后端服务还可以连接数据库保证本地json文件和数据库的一致性。
![物料同步数据流转图](./imgs/synchronize-materials.png '物料同步数据流转图')
### 拆分脚本
```shell
pnpm splitMaterials
```
之前对物料的修改要先从大文件bundle.json中找到对应组件然后进行修改调试很容易出现找错组件或难以对比历史的情况。
执行该脚本可以将物料资产包拆分为单个组件或区块,再结合构建的脚本,可以将修改限制在相对较小的文件中,便于维护物料和对比变更。
### 构建脚本
```shell
pnpm buildMaterials
```
结合拆分物料的脚本,只关心单个组件的变化。通过读取、写入本地文件和执行 sql 语句,同步更新物料资产包、应用数据和数据库,保证物料的一致性:
- 读取单个组件或区块文件,构建为物料资产包
- 读取单个组件文件,更新应用 mock 数据 appinfo 中的组件数据
- 连接数据库,初始化组件表,将组件数据写入数据库
- 监听组件文件变化,重新构建物料资产包和应用 mock 数据,新增或更新数据库中组件数据
### 注意事项
1. 本地还没有执行过拆分脚本的,先执行一次,后续可以不用再执行,只需要对单个组件进行维护
2. 单个组件文件需要遵循物料协议,更新文件后保存即可触发重新构建物料资产包,刷新页面后生效
3. 连接数据库失败不影响构建本地物料资产包即bundle.json
4. 连接数据库需要的配置项在`.env.local`中
5. 数据关联关系可能没有入库如果查询不到新添加的组件需要手动在数据库表r_material_component、r_material_history_component添加关联关系数据
### 部署建议
需要将设计器进行部署时,关于物料的部署方案,以下供参考:
1. 将bundle.json上传到CDN或是自己搭建的静态服务器获得文件地址修改lowcode.config.js中物料请求地址
2. 将bundle.json随设计器一起打包修改`useResource.fetchMaterial`中的实现,物料资产包数据由请求接口改为加载本地文件
3. 新增构建物料资产包接口从数据库获取组件表数据组装成符合物料协议的物料资产包将物料资产包的请求方式由CDN地址改为请求接口