AST 插件系列
const babelParser = require('@babel/parser');
const traverse = require('@babel/traverse').default;
const jscode = `x > 10 ? a=1 : a=2`
const ast = babelParser.parse(jscode);
const generator = require('@babel/generator').default
const types = require('@babel/types')
traverse(ast, {
ConditionalExpression(path) {
const { test, consequent, alternate } = path.node;
let ifstate = types.BlockStatement([types.ExpressionStatement(consequent)],[])
let elsestate = types.BlockStatement([types.ExpressionStatement(alternate)],[])
path.replaceWithMultiple(types.ifStatement(test, ifstate, elsestate));
}
});
let {code} = generator(ast,opts = {
jsecOption:{'minimal':true},
"comments":false,
})
console.log(code);