baidu/san-ssr

编译产物中通过 require 加载外部类获取 prototype

meixg opened this issue · 3 comments

meixg commented

问题

目前在 toSource 编译时,会尝试将原始组件的定义输出在文件中。

  1. 输入是 string 时,会将原始文件内容直接输出。
    image
  2. 输入是 class 时,会通过 toString() 的方式将组件定义输出。

这个过程中存在很多问题:

  1. 组件书写复杂时,无法静态解析。
  2. toString() 时,定义在函数外部的变量会丢失。

想法

toRender 时,由于直接使用了 内存中的组件类,则可以避免上述问题。基于这个想法,考虑在 toString 时,支持直接 require 获取组件类,例如:
image

难点

在编译阶段需要知道组件对应的路径,生成 require 这个路径获取组件类的代码。这个路径可能需要在编译阶段手动指定。

cxtom commented

也就是编译阶段,一个san组件会生成两个文件?
感觉可以新增一个接口,里面约定好输出路径,文件都按照固定的规则来输出

meixg commented

新想法:可以在 render 阶段把根组件类传入进去,剩下的子组件类都可以一层一层直接从父组件类上获取到了。

cxtom commented

新想法:可以在 render 阶段把根组件类传入进去,剩下的子组件类都可以一层一层直接从父组件类上获取到了。

哦,这样好像简单点