手写 ES6 转换翻译器

AI 摘要记录把旧式 BI 代码自动转换为 ES6 class 的规则、步骤与实现思路。

背景

ES6 转换过程,将旧式的 BI.inherit 代码转换成现代 ES6 class 语法。

核心思路

我们有成百上千个文件需要转换。总结规律:

  1. BI.Buttonexport class Button 有规律可循
  2. 核心问题:怎么把 JSON 格式转换成对象形式
  3. BI.XXX 相关函数,通过正则匹配,构建整个 FineUI 的依赖图,计算 import 路径
  4. BI.Button.superclass._defaultConfig.apply 可以直接用正则替换成 super._defaultConfig
  5. var 转换成 const 可以通过编程调用 eslint 完成

实现 Class 模板

一个 Class 模板包含:I(import)、A(属性)、E(静态方法)、M(方法)。

通过正则匹配 clzName 和 superName。

计算对象的方法

使用 eval 的创新性方法。mock 一个 BI 全局对象,通过 inherit 方法去求得 options 传入的 JSON 属性。

构建依赖结构

通过标准的遍历算法对所有文件走一遍,在 handle 函数中使用正则获取文件中的类。

经过 dfs,获取 depts 对象,可以通过 depts["Button"] 索引到 Button 类的绝对路径,也可以通过 depts['"bi.button"'] 索引。

然后根据两个路径计算出相对路径。

设计加载器

类似于 Koa 框架中的路由设计。

总结

总共写了一天半,为4个人至少节约了 2-3 天的时间。用振飞哥的话来说:有了这个脚本,心情变好了。可以过个好年。