[RFC] optimize live demo feature in 2.3 alpha version #1991
PeachScript
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
计划对 #1905 实现的 live demo 能力做调整,出发点如下:
调整计划:
demo-scopes和disabled,demo 的依赖作用域直接跟着 demo 元数据走,因为 demo component 执行本身也需要依赖,所以不会增加额外的尺寸@/constants之类的,下方生成 context 时会用到evalCode、LiveProvider、useDemoScopes及相关的 slots 合并梳理成useLiveDemoAPI 和SourceCodeEditorSlot 两部分useLiveDemoid,返回node、error和setSources参数,内部会带上 context 执行 sources 后返回新的 demo 组件,包含原evalCode的逻辑,但执行方式为传入虚拟的require、module和exports,这样不用对源代码做特殊处理ErrorBoundarySourceCodeEditor,是SourceCodeslot 的可编辑版本,为了覆盖已经自定义SourceCode的场景,所以要建个新的 slot 来实现,如何工作:onTranspile的 prop,在源码被转换的时候触发,用 sucrase transpire 源码,以便为自定义留出空间(比如 sucrase 不支持 Vue,通过替换该 slot 可自定义编译 Vue)SourceCode上面垫一个透明的 textarea,这样可以省去 editor 的尺寸,同时要考虑SourceCode自定义后行高、字体发生改变的情况onTranspile传递 error 供外部展示PreviewerActions:SourceCode的渲染根据 demo 的 context 标记差异化渲染为SourceCodeEditor,存在 context 才支持编辑,兼容没实现该能力的技术栈onSourcesChange的 prop,聚合内部SourceCodeEditor的onChange结果返回出来Tab 栏上展示已编辑状态,比如* index.tsxPreviewer:PreviewerActions的onSourcesChange与useLiveDemo的setSources绑定useLiveDemo获取实时编译的组件,存在liveDemoNode时替代props.children渲染postMessage传递给 iframe 内的DemoRenderPage去做实时编译渲染DemoRenderPage:postMessage数据与useLiveDemo的setSources绑定useLiveDemo获取实时编译的组件,存在liveDemoNode时替代demo.component渲染Beta Was this translation helpful? Give feedback.
All reactions