• @babel/types ast编译文件


    const parse = require('@babel/parser').parse;
    const t = require('@babel/types');
    const generate = require('@babel/generator').default;
    const traverse = require('@babel/traverse').default
    
    
    
    const code = '';
    const ast = parse(code);
    
    
    // 1.生成数字 1
    const number = t.numericLiteral(1);
    
    // 2.生成二元表达式 1+ 1
    const  exp = t.binaryExpression('+',number, number);
    // 3.生成变量a
    const  variable = t.identifier('a');
    // 4.生成变量声明  a = 1 + 1 
    const  declarations =  t.variableDeclarator(variable, exp);
    // 5.生成变量声明  const a = 1 + 1
    const  content = t.variableDeclaration('const', [declarations]);
    ast.program.body.push(content);
    const output  = generate(ast, {quotes:'single', retainLines : true});
    console.log(output.code);  //  const a = 1 + 1 ;
    
    
    traverse(ast, {
    	BinaryExpression(path){
    		// console.log(path)
    		if(path.node.operator === '+'){
    			// path.replaceWith(t.binaryExpression('*', path.node.left, path.node.right))
    			path.replaceWithSourceString('a * c');
    		}
    	}
    })
    
    const output2  = generate(ast, {quotes:'single', retainLines : true});
    console.log(output2.code);  //  const a = 1 + 1 ;
    
    
    // -----插入操作
    const code2 = `
    	const  obj = {
    		a: 'a',
    		b: 'b'
    	}
    `
    
    const ast2 = parse(code2);
    
    const property  =  t.objectProperty(t.identifier('c'), t.stringLiteral('c'));
    
    traverse(ast2, {
    	ObjectExpression(path){
    		
    		console.log(path,"xxxx")
    		path.pushContainer('properties',  property)
    	}
    });
    
    const out3 = generate(ast2,{quotes:'single', retainLines:true })
    
    console.log(out3.code,"out3")
    
  • 相关阅读:
    【DUBBO】dubbo架构详解(转载)
    【数据库】sql连表查询
    第十三章 三种非对称加密算法总结
    第十二章 非对称加密算法-RSA
    第十一章 非对称加密算法--DH
    第十章 五种对称加密算法总结
    第九章 对称加密算法--IDEA
    第八章 对称加密算法--AES
    第七章 对称加密算法--DES
    第六章 三大消息摘要算法总结
  • 原文地址:https://www.cnblogs.com/chengyunshen/p/13043148.html
Copyright © 2020-2023  润新知