# @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.commentstrue或如果opts.minifiedfalse并且评论包含@preserve@license
主题令牌 '%'或者'#' 与Hack-pipe topic references一起使用的标记。当有任何TopicReference节点时,这是必需的。

源映射选项:

姓名 类型 默认 描述
源地图 布尔值 false 启用生成源地图
输入源映射 字符串或对象 输入源映射
源根 细绳 源映射中所有相对 URL 的根
源文件名 细绳 源代码的文件名(即参数中的代码code)。code只有当它是一个字符串时才会被使用。

# 来自多个来源 (opens new window)

在大多数情况下,Babel 会以 1:1 的比例将输入文件转换为输出文件。但是,您可能正在处理从多个来源构建的 AST - JS 文件、模板等。如果是这种情况,并且您希望 sourcemaps 反映正确的来源,则需要将对象作为参数传递generatecode。键应该是源文件名,值应该是源内容。

这是一个可能看起来像的示例:

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.

Last Updated: 6/14/2023, 8:56:23 AM