API
- useReducer
将一批编译原子挂载到原子树上。
这一批编译原子也可称为一个插件,它们对应相应的功能。从编译器的角度来说,即给编译器扩充对应的功能。
- runApp
编译入口执行函数,在这里传入编译全局配置
编译原子
一个编译原子对应一个函数。
如下是一个简单的编译原子,它的作用是忽略对 dist
目录的编译处理。
// 忽略某一个目录
Directory (node) {
if (node.filename === 'dist') {
node.children = [];
}
}
编译原子 API
- addChild
给当前编译原子添加一个子节点。
// 处理 css 文件
useReducer({
File (node) {
if (node.extname === '.css') {
this.addChild('CompileCss')
}
},
CompileCss () {
console.log('a');
}
})
useReducer({
CompileCss: {
hook: 'before',
body (node, store) {
// 这里在 CompileCss 之前插入一个编译原子
console.log('b');
}
}
})
如上所示,给后缀为 .css
的文件添加了一个名为 CompileCss
编译原子作为子节点,当 File 节点的编译事务处理完后就会对该子节点的事务进行处理。在这之后又给 CompileCss
插入了一个 before
编译原子,最终这两个同名原子会合并为一个原子在 File 之后执行,按顺序输出 b
, a
。
- hook
可以通过 hook 给已有的编译原子扩展功能,hook 类型有
- before - 执行前插入
- after - 执行之后插入
- mounted - 所以子节点执行完毕后插入
- replace - 替换编译原子
Amove 只有这么几个核心的 API,基于上述的 API 不断扩充插件会增加编译器的能力,从而具备代码编译的功能。