# @babel/发电机
将 AST 转换为代码。
# 安装
- npm
npm install --save-dev @babel/generator
- yarn
yarn add --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
);
注意:空格或换行符等符号不会保留在 AST 中。当 Babel 生成器从 AST 打印代码时,无法保证输出格式。
# 选项
历史| | | | :--- | :--- | | | `` |
格式化输出的选项:
姓名 | 类型 | 默认 | 描述 |
---|---|---|---|
辅助评论后 | 细绳 | 在输出文件末尾添加为块注释的可选字符串 | |
辅助评论前 | 细绳 | 在输出文件的开头添加为块注释的可选字符串 | |
评论 | 布尔值 | true | 注释是否应包含在输出中 |
袖珍的 | 布尔值或'auto' | opts.minified | 设置为true 避免为格式化添加空格 |
简洁的 | 布尔值 | false | 设置true 为减少空格(但不及opts.compact ) |
decoratorsBeforeExport | 布尔值 | 设置为在输出true 之前打印装饰器。export | |
文件名 | 细绳 | 用于警告信息 | |
jsesc选项 | 目的 | 用于jsesc 处理文字。仅当(added in ) 存在时才jsesc 应用于数字。您可以通过将选项传递给它来进行自定义。jsescOption.numbers``v7.9.0``jsesc (opens new window) | |
jsonCompatibleStrings | 布尔值 | false | 设置为 true 以jsesc 使用“json”运行:true 打印“\u00A9”与“©”; |
缩小 | 布尔值 | false | 是否应该缩小输出 |
保留函数参数 | 布尔值 | false | 保留函数表达式周围的括号(可用于更改引擎解析行为) |
保留线 | 布尔值 | false | 尝试在输出代码中使用与源代码中相同的行号(有助于保留堆栈跟踪) |
应该打印注释 | 功能 | opts.comments | 接受注释(作为字符串)并返回true 注释是否应包含在输出中的函数。默认情况下,如果opts.comments 是true 或如果opts.minified 是false 并且评论包含@preserve 或@license |
主题令牌 | '%' 或者'#' | 与Hack-pipe topic references 一起使用的标记。当有任何TopicReference 节点时,这是必需的。 |
源映射选项:
姓名 | 类型 | 默认 | 描述 |
---|---|---|---|
源地图 | 布尔值 | false | 启用生成源地图 |
输入源映射 | 字符串或对象 | 输入源映射 | |
源根 | 细绳 | 源映射中所有相对 URL 的根 | |
源文件名 | 细绳 | 源代码的文件名(即参数中的代码code )。code 只有当它是一个字符串时才会被使用。 |
# 来自多个来源 (opens new window)
在大多数情况下,Babel 会以 1:1 的比例将输入文件转换为输出文件。但是,您可能正在处理从多个来源构建的 AST - JS 文件、模板等。如果是这种情况,并且您希望 sourcemaps 反映正确的来源,则需要将对象作为参数传递generate
给code
。键应该是源文件名,值应该是源内容。
这是一个可能看起来像的示例:
JavaScript
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 will point to both a.js and b.js where appropriate.