babel 转换箭头函数
Posted guangzhou11
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了babel 转换箭头函数相关的知识,希望对你有一定的参考价值。
转换前:
const sum = (a,b)=>a+b
转化后:
// "use strict";
// var fn = function fn(a, b)
// return a + b;
// ;
实现:
从图片的对比我们可以看出最大的不同是在 init 时,函数的不同
init
Es6 : ArrowFunctionExpression
Es5: FunctionExpression
所以我们可以利用一个插件转化
let t = require(‘@babel/types‘);
具体:
const babel = require(‘@babel/core‘); let code = `let fn = (a,b) => a + b`; let t = require(‘@babel/types‘); //1.init // Es6 : ArrowFunctionExpression // Es5: FunctionExpression /// t.functionExpression(id, params, body, generator, async) // id: Identifier (default: null) // params: Array<LVal> (required) // body: BlockStatement (required) // generator: boolean (default: false) // async: boolean (default: false) // returnType: TypeAnnotation | TSTypeAnnotation | Noop (default: null) // typeParameters: TypeParameterDeclaration | TSTypeParameterDeclaration | Noop (default: null) //2. body // // ES5 BlockStatement // Es6 ExpressionStatement let transformArrowFunctions = visitor: ArrowFunctionExpression: (path, state) => // console.log(path.node) // console.log(path.parent.id) let node = path.node; let id = path.parent.id; let params = node.params; let body=t.blockStatement([ t.returnStatement(node.body) ]); //将ArrowFunctionExpression 转化为 FunctionExpression ,传入不要的参数 let functionExpression = t.functionExpression(id,params,body,false,false); path.replaceWith(functionExpression); const result = babel.transform(code, plugins: [transformArrowFunctions] ); console.log(result.code); // let fn = function fn(a, b) // return a + b; // ;
输出:
let fn = function fn(a, b) return a + b; ;
AST树可视化工具的网站: https://astexplorer.net/
以上是关于babel 转换箭头函数的主要内容,如果未能解决你的问题,请参考以下文章
es6的箭头函数转换为普通函数,以及将await/async函数转为普通函数