安装
npm install --save-dev @babel/generator
使用
import {parse} from '@babel/parser';
import generate from '@babel/generator';
const code = 'class Example {}';
const ast = parse(code);
const output = generate(ast, { /* options */ }, code);
选项
格式化输出的选项:
auxiliaryCommentBefore
type:string
default:
description:作为块注释添加到输出文件开头的可选字符串
auxiliaryCommentAfter
type:string
default:
description:在文件的结尾添加可选的字符串作为注释
shouldPrintComment
type:function
default:opts.comments
description:函数,该函数接受注释(作为字符串)并在输出中包含注释时返回true。默认情况下,注释是被包含的。如果opts.comments:true 或者opts.minified:false,并且注释包含@preserve或@license
retainLines
type:boolean
default:false
description:尝试在输出代码中使用与源代码相同的行号(有助于保留堆栈跟踪)
retainFunctionParens
type:boolean
default:false
description:保留函数表达式周围的parens(可用于更改引擎解析行为)
comments
type:boolean
default:true
description:输出中是否应包含注释
compact
type:boolean or 'auto'
default:opts.minified
description:设置为true以避免为格式添加空白
minified
type:boolean
default:false
description:应该缩小输出吗
concise
type:boolean
default:false
description:设置为true以减少空白(但不如选择紧凑型)
filename
type:string
default:
description:用于警告消息
jsonCompatibleStrings
type:boolean
default:false
description:设置为true以使用“json”运行jsesc:true将打印“\u00A9”vs。
源映射的选项:
sourceMaps
type:boolean
default:false
description:启用生成源映射
sourceRoot
type:string
default:
description:源映射中所有相对URL的根
sourceFileName
type:string
default:
description:源代码的文件名(即code参数中的代码)。仅当代码是字符串时才使用此选项。
来自多个来源的AST
在大多数情况下,Babel会将输入文件转换为输出文件。但是,您可能正在处理由多个源(JS文件、模板等)构造的AST。如果是这种情况,并且您希望sourcemap反映正确的源,则需要传递一个要生成的对象作为代码参数。键应该是源文件名,值应该是源内容。
下面是一个可能的示例:
import {parse} from '@babel/parser';
import generate from '@babel/generator';
const a = 'var a = 1;';
const b = 'var b = 2;';
const astA = parse(a, { sourceFilename: 'a.js' });
const astB = parse(b, { sourceFilename: 'b.js' });
const ast = {
type: 'Program',
body: [].concat(astA.program.body, astB.program.body)
};
const { code, map } = generate(ast, { sourceMaps: true }, {
'a.js': a,
'b.js': b
});
// sourcemap将在适当的地方同时指向a.js和b.js。