[会议] Vue 技术栈方案讨论 #1959
Replies: 4 comments 5 replies
-
几项待办更新:
重新捋了下逻辑,倾向于这么设计: // 技术栈上新增方法
function onBlockLoad(args: { entryPointCode?: string} & onLoadArgs): null | { type: 'module' | 'text'; content: string; } 理由:
赞成 demo 独立打开应该与 React 解耦,也赞成 Storybook 的设计方式,但我还是倾向于不在 Vue 技术栈的 PR 中做比较大的改动,原因是在 dumi 已经有『技术栈』概念的基础上,相关逻辑都收在技术栈里会更加干净,技术栈开发者要关心的细节也更少 但未来 mpa 还是要做的,能明显提升 demo 独立访问的体验,所以这一次也需要做好和 React 解耦的准备,大致的思路(仅作示意): // DumiDemo 做逻辑调整
const demo = demos[props.demo.id];
useEffect(() => {
if (demo.renderType === 'CANCELABLE_FN') {
return demo.component(ref.current);
}
});
// techStack 可以选择声明 renderType,为 CANCELABLE_FN 时对外部 demo 做调整
demo.renderType = techStack.renderType;
if (外部 demo && techStack.renderType === 'CANCELABLE_FN') {
demo.component = `
function(elm) {
let cancel;
import(...).then(fn => cancel = fn(elm));
return () => { cancel() }
}`;
} else {
// 原逻辑
component = `React.memo(React.lazy(() => import(...)))`;
} 给技术栈增加一种 Cancelable Function 的渲染方式,非 React 技术栈无需再套 React 组件及关心 React 生命周期,也给未来实现 mpa 留出了空间。
出现这个问题实际上是技术栈开发者的疏漏,如果技术栈不支持相关能力,应当通过 为了一个可能存在的异常链路要增加复杂的 runtimeApi 设计,这个收益是比较低的;如果一定要解,也建议从编译时去解,比如让 techStack 主动声明 runtimePlugin 属性,由框架去解析 runtimePlugin 的导出来判断是否有实现相关按钮的能力,最后再决定如何设置
WIP,不希望拆这两个概念但还没想清楚怎么解
看了下功能上和 import { transformDemoCode } from 'dumi/tech-stack-utils';
transformCode() {
const result = transformVue(...);
const code = transformDemoCode(result);
return `
const app = createApp(${code});
...
`
} |
Beta Was this translation helpful? Give feedback.
-
记个 TODO:2.3 会支持 demo 编辑实时预览,需要评估下 Vue.js 技术栈怎么支持编辑实时预览,sucrase 目前不支持编译 Vue 组件 |
Beta Was this translation helpful? Give feedback.
-
目前进度 @PeachScript #1922
|
Beta Was this translation helpful? Give feedback.
-
当前进度(
|
Beta Was this translation helpful? Give feedback.
-
1.
resolve.customParser
确定现在不开放,官方的维护团队将基于社区成熟方案提供新的 parser,替换当前 dumi 内置的闭源解析器2.
resolveDemoModule
的实现收敛到 TechStack 中,需要提供处理 block parse 的新方法,名称是什么? (tryloadBlock
@PeachScript ) @jeffwcx3. preset 名称已确认为
@dumijs/preset-vue
4. Vue 2 支持计划讨论:
- vue-loader 有同名不同版本的问题, 要么让用户自己安装,要么我们分成两个 preset 实现
- 先保持现状,在发布后看 Vue 2 用户的反馈
5.
globalInject
选项先不加,后续使用运行时钩子的形式来实现 @jeffwcx- 给 demo 运行时添加自定义的全局代码,Vue 配置 app,preset-vue -> setupDemoApp(app)
6.
requireHook
里只多了 tapable, @xierenyuan 确认 vue-loader 是否有依赖,没有依赖就可以直接移除7.
renderToCanvas
待定,需要考虑运行时独立渲染 demo 时套娃的情况 @PeachScript8.
openCodeSandbox
要考虑技术栈开发者没有实现,但同时也没有禁用该按钮导致打开报错的情况 @PeachScript9.
LanguageMetaParser
、createRemoteClass
需要再看看概念上是否要做调整 @PeachScript10.
babel-plugin-iife
的实现需要看一下 @PeachScriptBeta Was this translation helpful? Give feedback.
All reactions