babel原理

babel原理

  • ES6 -> ES5

  • Babel主要工作是对代码进行转译

  • 三个阶段

    • 解析(Parse): 将代码解析生成抽象语法🌲AST(词法分析+语法分析)
    • 转换(Transform): 对语法树进行变换方面的一系列操作。通过babel-traverse, 进行遍历并作添加、更新、删除等操作
    • 生成(Generate), 通过babel-generator将变换后的AST转换为JS代码
如何写一个babel插件
npm i babel-types babel-core --save-dev

index.js

const t = require("babel-types");

const visitor = {
  BinaryExpression(path) {
    const node = path.node;

    let result;

    if (t.isNumericLiteral(node.left) && t.isNumericLiteral(node.right)) {
      switch (node.operator) {
        case "+":
          result = node.left.value + node.right.value;
          break;
        case "-":
          result = node.left.value - node.right.value;
          break;
        case "*":
          result = node.left.value * node.right.value;
          break;
        case "/":
          result = node.left.value / node.right.value;
          break;
        default:
          break;
      }
    }

    if (result !== undefined) {
      path.replaceWith(t.numericLiteral(result));

      let parentPath = path.parentPath;
      parentPath && visitor.BinaryExpression.call(this, parentPath);
    }
  },
};

module.exports = function (babel) {
  return {
    visitor,
  };
};

test-babel.js

const babel = require("babel-core");

const result = babel.transform("const result = 1 + 2", {
  plugins: [require("./babel.js")],
});

console.log(result.code);
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值