alibaba / lowcode-engine

An enterprise-class low-code technology stack with scale-out design / 一套面向扩展设计的企业级低代码技术体系
https://lowcode-engine.cn
MIT License
14.66k stars 2.55k forks source link

设计器组件集成到微服务后无法正常工作 #1268

Open zaraChun opened 1 year ago

zaraChun commented 1 year ago

问题原因://g.alicdn.com/ali-lowcode/ali-lowcode-engine/1.0.63/engine-core.js 这个js里面又段逻辑: const publicPath = (document.currentScript as HTMLScriptElement)?.src.replace(/^(.*\/)[^/]+$/, '$1');

export function getPublicPath(): string { return publicPath || ''; }

这个逻辑在应用单独启动时候,能够正确计算出simulator js的地址:https://g.alicdn.com/ali-lowcode/ali-lowcode-engine/1.0.63/react-simulator-renderer.js

当集成到主应用后,这个js的地址会错误,主要是因为publicPath = ''

想咨询下以下几个问题: 1)engine-core.js的执行时机,由于这个是在主应用加载的,是不是在子应用页面渲染的时候,计算会出错 2) 如何解决此问题

JackLian commented 1 year ago

给个复现demo吧,这样也没办法诊断问题

github-actions[bot] commented 1 year ago

你好 @zaraChun,由于缺乏必要的信息(如 bug 重现步骤、引擎版本信息 等),无法定位问题,请按照 issue bug 模板 补全信息,也可以通过阅读引擎的 issue 说明 了解什么类型的 issue 可以获得更好、更快的支持。

LeoYuan commented 1 year ago

给一点我的思路: engine-core.js 正常是浏览器里 script 直接加载的,所以通过 document.currentScript.src 能拿到 engine-core.js 的 src,现在通过微前端(qiankun? icestark?)动态加载 engine-core.js 后,document.currentScript.src 丢失了,所以去看下相应的微前端框架,如何让动态加载 script 能够拿到自身的 src

LeoYuan commented 1 year ago

再或者偷点懒,引擎 init 时直接指定 simulatorUrl,也就不用上述代码推断了~

darknessjs commented 1 year ago

出现了同样的问题..

darknessjs commented 1 year ago

是因为在一些微前端框架是用的fetch获取的js资源 加载engine-core.js时用了fetch之后,document.currentScript就获取不到当前的值了

WHSnhcZDYRZC commented 4 months ago

可以去看下这个库的解决方案哦 https://github.com/WHSnhcZDYRZC/umi4-lowcode-engine-solutions