API

  • useReducer

将一批编译原子挂载到原子树上。

这一批编译原子也可称为一个插件,它们对应相应的功能。从编译器的角度来说,即给编译器扩充对应的功能。

  • runApp

编译入口执行函数,在这里传入编译全局配置

编译原子

一个编译原子对应一个函数。

如下是一个简单的编译原子,它的作用是忽略对 dist 目录的编译处理。

  1. // 忽略某一个目录
  2. Directory (node) {
  3. if (node.filename === 'dist') {
  4. node.children = [];
  5. }
  6. }

编译原子 API

  • addChild

给当前编译原子添加一个子节点。

  1. // 处理 css 文件
  2. useReducer({
  3. File (node) {
  4. if (node.extname === '.css') {
  5. this.addChild('CompileCss')
  6. }
  7. },
  8. CompileCss () {
  9. console.log('a');
  10. }
  11. })
  1. useReducer({
  2. CompileCss: {
  3. hook: 'before',
  4. body (node, store) {
  5. // 这里在 CompileCss 之前插入一个编译原子
  6. console.log('b');
  7. }
  8. }
  9. })

如上所示,给后缀为 .css 的文件添加了一个名为 CompileCss 编译原子作为子节点,当 File 节点的编译事务处理完后就会对该子节点的事务进行处理。在这之后又给 CompileCss 插入了一个 before 编译原子,最终这两个同名原子会合并为一个原子在 File 之后执行,按顺序输出 b, a

  • hook

可以通过 hook 给已有的编译原子扩展功能,hook 类型有

  • before - 执行前插入
  • after - 执行之后插入
  • mounted - 所以子节点执行完毕后插入
  • replace - 替换编译原子

Amove 只有这么几个核心的 API,基于上述的 API 不断扩充插件会增加编译器的能力,从而具备代码编译的功能。