美文网首页
一个例子 - 入门JS中的AST的使用

一个例子 - 入门JS中的AST的使用

作者: Jason_Zeng | 来源:发表于2019-08-27 00:23 被阅读0次

使用一个AST库做babel插件转化步骤

  1. 打开网页https://astexplorer.net/, 可以选择esprima作为AST解析库,可以输入代码const sum = (a,b) => a+b;,截图如下,好吧右边就是解析好的AST的语法树了, 可以仔细看下每段代码都有对应的属性描述
image.png
  1. JS中引用babel相应的包,可以实现把代码输入进去,在解析间通过访问者模式,你可以声明不同类型(对应解析为AST语法树的type类型)的访问者,当作插件注入到转换的过程中

  2. 在解析期间会传入解析的节点,你需要做的就是处理这些节点的类型或者值,替换为你需要的东西,这样一个AST的babel插件就写好了,下面事简单的代码

const babel = require("@babel/core");
const babelTypes = require("babel-types");
// 箭头函数代码
const code = "const sum = (a,b) => a+b";

// 写自己的babel的转换器,visitor的访问者模式
let transformArrowFunction = {
    visitor: { // 访问者模式, 处理箭头函数
        ArrowFunctionExpression: (path,state) => {
            let node = path.node;
            let id = path.parent.id;
            let params = node.params;
            // 创建大括号表达式
            let body = babelTypes.blockStatement([
                babelTypes.returnStatement(node.body)
            ]);
            // 创建函数表达式
            let functionExpression = babelTypes.functionExpression(id,params,body,false,false);
            // 把原来的箭头表达式替换了
            path.replaceWith(functionExpression);
        }
    }
};

// 用babel的转换,传个插件进去
const result = babel.transform(code,{
    plugins: [
        transformArrowFunction
    ]
});

console.log(code);
console.log(result.code);

相关文章

  • 一个例子 - 入门JS中的AST的使用

    使用一个AST库做babel插件转化步骤 打开网页https://astexplorer.net/, 可以选择es...

  • 使用typescript来修改js文件

    原理 使用typescript把源代码读成ast,然后修改ast结构,然后将ast重新还原成js代码,最后将js代...

  • 2018-03-29

    js_Ast structure seems that it is a pure ast tree, but i ...

  • [vue]-No.03

    [2017.03.16] 安装vue:nmp install vue;在页面中引入vue.js: 入门小例子: ...

  • JS编译——AST

    JS编译——AST AST 抽象语法树(Abstract Syntax Tree,AST),或简称语法树(Synt...

  • 安装vuex

    创建store文件——>index.js: 例子 挂载 在组件中获取store的 使用 存数据例子 使用 acti...

  • Mapbox GL JS本地化实践

    在Mapbox GL JS 设计浅析中我们知道Mapbox GL JS使用的样式是在线的,比如官网中第一个例子: ...

  • Node.js 入门笔记

    1. 官方入门的 Node.js 例子 app.js: 执行命令 node app.js 就可以直接运行起来,无需...

  • 编译原理Parser

    Input: Cool 的代码 output: AST tree Parse Tree例子: Parse Tree...

  • js 之map和reduce方法 练习

    下面是js中MapReduce的简单练习。主要使用js提供给数组的map和reduce方法,最后一个例子考虑一下可...

网友评论

      本文标题:一个例子 - 入门JS中的AST的使用

      本文链接:https://www.haomeiwen.com/subject/jdojectx.html