手写 ES6 转换翻译器
AI 摘要记录把旧式 BI 代码自动转换为 ES6 class 的规则、步骤与实现思路。
背景
ES6 转换过程,将旧式的 BI.inherit 代码转换成现代 ES6 class 语法。
核心思路
我们有成百上千个文件需要转换。总结规律:
- 从
BI.Button到export class Button有规律可循 - 核心问题:怎么把 JSON 格式转换成对象形式
BI.XXX相关函数,通过正则匹配,构建整个 FineUI 的依赖图,计算 import 路径BI.Button.superclass._defaultConfig.apply可以直接用正则替换成super._defaultConfigvar转换成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 天的时间。用振飞哥的话来说:有了这个脚本,心情变好了。可以过个好年。