babel/core
1const babel = require('@babel/core');2const code = "class glass {get name() { return '水杯' }}";3const options = {4 presets: ['@babel/preset-env'],5}6// 直接转换7const result1 = babel.transform(code, options);89// 异步转换10babel.transformAsync(code, options).then(res => console.log(res));11console.log(result);1213// 加载文件同步转换14const content = babel.transformFileSync('./babel-file.js');15console.log(content);1617// 生成AST语法树18const parsedAst = babel.parse(code, { parserOpts: { allowReturnOutsideFunction: true } });19console.log(parsedAst);2021// 通过语法树转换22const result3 = babel.transformFromAst(parsedAst, code, options);23console.log(result3);2425// 生成config26const config = babel.loadPartialConfig(options); // 提前生成config27const result = babel.transform(code, config.options);28console.log(result);
1babel/core的作用2=3babel/parser(词法分析+语法分析 = AST)4+5babel/traverse (AST 经过plugin转化)6+7babel/generator (AST 生成code字符串)
babel/parser
实际就是babel内置的parser babelParser.parse(code, options) 等价于babel.parse(code, options); 会return一个AST树
1const babel = require('@babel/core');2const code = "class glass {get name() { return '水杯' }}";3const options = {4 presets: ['@babel/preset-env'],5}67const parsedAst = babel.parse(code);8console.log(parsedAst);910import { parse } from '@babel/parser';11const ast = parse(code);12console.log(ast);
babel/generator
读取ast,并将它转化成代码以及source map.
1import { parse } from '@babel/parser';2import generate from '@babel/generator';3const ast = parse(code);4const output = generate(ast, {minified: true}, code);5console.log(output);
generater的作用仅仅是进行转化成代码,不会进行处理,与babel/core一节的transformFromAst不同,transformFromAst是会经过plugin的处理的,实质上是babel/traverse + generater的结合.
总结
实际上,通过babel/core的实现也可以看到,babel/core的依赖就是babel/parser + babel/traverse + babel/generator。