babel-generator

babel-generator

安装

npm install --save-dev babel-generator

使用

import {parse} from 'babylon'; import generate from 'babel-generator'; const code = 'class Example {}'; const ast = parse(code const output = generate(ast, { /* 选项 */ }, code

选项

格式化输出的选项:

选项名类型默认值描述
auxiliaryCommentBeforestring可选字符串,在输出文件的开始添加块注释
auxiliaryCommentAfterstring可选字符串,在输出文件的末尾添加块注释
shouldPrintCommentfunctionopts.comments如果注释需要包含在输出中,该函数则需接受注释(作为字符串)并返回 true 。 默认情况下,如果 opts.commoents 为 true 或者 opts.minifed 为 false 并且注释中包含 @preserve 或 @license,则包含注释。
retainLinesbooleanfalse尝试在输出的代码中使用与源代码相同的行号(有助于保留栈信息跟踪)
retainFunctionParensbooleanfalse保留函数表达式的上下级 (可用于更改引擎解析行为)
commentsbooleantrue输出中是否包含注释
compactboolean or 'auto'opts.minified设置为 true 以避免添加用于格式化的空格
minifiedbooleanfalse输出是否被压缩
concisebooleanfalse设置为 true 以减少空格 (但效果不如 opts.compact )
quotes'single' or 'double'基于 ast.tokens 的自动检测输出中对引号的类型进行保留
filenamestring在警告信息中使用
flowCommaSeparatorbooleanfalse设置为 true 以使用逗号而不是分号作为 Flow 属性的分隔符
jsonCompatibleStringsbooleanfalse设置为 true,使用 "json" 运行 jsesc:正确的将 "\u00A9" 打印为 "©" ;

source maps 的选项:

选项名类型默认值描述
sourceMapsbooleanfalse启用生成 source maps
sourceMapTargetstringsource map 会与生成代码的文件名进行关联
sourceRootstringsource map 中所有对应 URLs 的 root
sourceFileNamestring源代码(例如, code 参数中的代码)的文件名。只会在 code 为字符串时使用。

多个来源构建 AST

在大多数情况下,Babel 会将输入文件与输出文件进行 1:1 转换。然而,你可能正在处理从多个来源构建的 AST - JS 文件,模板等。如果出现这种情况,并且你还希望 source map 为你提供正确的来源,则需要将一个对象作为 code 参数传递给 generate。其中键应该为源文件名称,值应该为源内容。

这是一个差不多的例子:

import {parse} from 'babylon'; 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 } // 在适当情况下,source map 会指向 a.js 和 b.js 。