メインコンテンツにスキップ

@babel/generator

ASTをコードに変換します。

インストール

npm install --save-dev @babel/generator

使用方法

JavaScript
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からコードを出力する際、出力形式は保証されません。

オプション

履歴
バージョン変更点
v7.22.0importAttributesKeywordを追加
v7.21.0inputSourceMapを追加

出力のフォーマットに関するオプション

nametypedefault説明
auxiliaryCommentAfterstring出力ファイルの末尾にブロックコメントとして追加するオプションの文字列
auxiliaryCommentBeforestring出力ファイルの先頭にブロックコメントとして追加するオプションの文字列
commentsbooleantrueコメントを出力に含めるかどうか
compactboolean または 'auto'opts.minifiedフォーマットのための空白の追加を避けるにはtrueに設定
concisebooleanfalse空白を減らすにはtrueに設定(ただしopts.compactほどではありません)
decoratorsBeforeExportboolean出力でexportの前にデコレーターを出力するにはtrueに設定します。
filenamestring警告メッセージで使用されます
importAttributesKeyword"with", "assert", または "with-legacy"使用するインポート属性/アサーション構文。import "..." with { type: "json" }の場合は"with"import "..." assert { type: "json" }の場合は"assert"import "..." with type: "json"の場合は"with-legacy"。指定しない場合、@babel/generatorはASTの形状に基づいて入力コードのスタイルに一致させようとします。
jsescOptionobjectリテラルを処理するためにjsescを使用します。jsescは、jsescOption.numbersv7.9.0で追加)が存在する場合にのみ数値に適用されます。jsescは、オプションを渡すことでカスタマイズできます。
jsonCompatibleStringsbooleanfalse「©」ではなく「\u00A9」を出力するために、"json": true でjsescを実行するにはtrueに設定します。
minifiedbooleanfalse出力がminifyされるかどうか
retainFunctionParensbooleanfalse関数式の周りの括弧を保持します(エンジンの解析動作を変更するために使用できます)
retainLinesbooleanfalse出力コードでソースコードと同じ行番号を使用しようとします(スタックトレースを保持するのに役立ちます)
shouldPrintCommentfunctionopts.commentsコメント(文字列として)を受け取り、コメントを出力に含める必要がある場合はtrueを返す関数。デフォルトでは、opts.commentstrueの場合、またはopts.minifiedfalseでコメントに@preserveまたは@licenseが含まれている場合にコメントが含まれます。
recordAndTupleSyntaxType'hash' または 'bar''hash'recordAndTupleトークンで使用します。
topicToken'%' または '#'Hackパイプトピック参照で使用するトークン。TopicReferenceノードがある場合に必要です。

ソースマップのオプション

nametypedefault説明
sourceMapsbooleanfalseソースマップの生成を有効にする
inputSourceMapstring または object入力ソースマップ
sourceRootstringソースマップ内のすべての相対URLのルート
sourceFileNamestringソースコードのファイル名(つまり、code引数内のコード)。これは、codeが文字列の場合にのみ使用されます。

複数のソースからのAST

ほとんどの場合、Babelは入力ファイルから出力ファイルへの1対1の変換を行います。ただし、複数のソース(JSファイル、テンプレートなど)から構築されたASTを処理している場合があります。この場合、ソースマップが正しいソースを反映するようにするには、codeパラメータとしてgenerateにオブジェクトを渡す必要があります。キーはソースファイル名であり、値はソースコンテンツである必要があります。

以下は、その例です

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.