@babel/generator
Преобразует AST в код.
Установка
- npm
- Yarn
- pnpm
npm install --save-dev @babel/generator
yarn add --dev @babel/generator
pnpm add --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
);
Примечание: Символы, такие как пробелы или символы новой строки, не сохраняются в AST. Когда Babel generator печатает код из AST, формат вывода не гарантируется.
Параметры
История
| Версия | Изменения |
|---|---|
| v7.21.0 | Добавлены inputSourceMap
|
Параметры для форматирования вывода:
| имя | тип | по умолчанию | описание |
|---|---|---|---|
| auxiliaryCommentAfter | строка | Дополнительная строка для добавления в виде блочного комментария в конце выходного файла | |
| auxiliaryCommentBefore | строка | Дополнительная строка для добавления в виде блочного комментария в начале выходного файла | |
| comments | логическое значение | true |
Включать ли комментарии в вывод |
| compact | логическое значение или 'auto'
|
opts.minified |
Установить в true для предотвращения добавления пробелов для форматирования |
| concise | логическое значение | false |
Установить в true для уменьшения пробелов (но не настолько, как opts.compact) |
| decoratorsBeforeExport | логическое значение | Установить в true для вывода декораторов перед export в выводе. |
|
| filename | строка | Используется в сообщениях об ошибках | |
| jsescOption | объект | Использовать jsesc для обработки литералов. jsesc применяется к числам только если jsescOption.numbers (добавлено в v7.9.0) присутствует. Вы можете настроить jsesc, передав параметры в него. |
|
| jsonCompatibleStrings | логическое значение | false |
Установить в true для выполнения jsesc с "json": true для вывода "\u00A9" вместо "©"; |
| minified | логическое значение | false |
Нужно ли сжимать вывод |
| retainFunctionParens | логическое значение | false |
Сохранить скобки вокруг выражений функций (может быть использовано для изменения поведения парсинга движка) |
| retainLines | логическое значение | false |
Попытка использовать те же номера строк в выводимом коде, что и в исходном коде (помогает сохранить отладочные трассировки) |
| shouldPrintComment | функция | opts.comments |
Функция, которая принимает комментарий (как строку) и возвращает true если комментарий должен быть включен в вывод. По умолчанию комментарии включаются, если opts.comments равно true или если opts.minified равно false и комментарий содержит @preserve или @license
|
| topicToken |
'%' или '#'
|
Токен, используемый с ссылками на тему Hack-pipe. Это необходимо, когда есть узлы TopicReference. |
Параметры для карт источников:
| имя | тип | по умолчанию | описание |
|---|---|---|---|
| sourceMaps | логическое значение | false |
Включить генерацию карт источников |
| inputSourceMap | строка или объект | Входная карта источников | |
| sourceRoot | строка | Корень для всех относительных URL-адресов в карте источников | |
| sourceFileName | строка | Имя файла исходного кода (т.е. код в code аргументе). Это будет использоваться только если code является строкой. |
AST из нескольких источников
В большинстве случаев Babel выполняет преобразование входного файла в выходной файл 1:1. Однако вы можете иметь дело с AST, построенным из нескольких источников — файлов JS, шаблонов и т. д. Если это так, и вы хотите, чтобы карты источников отражали правильные источники, вам необходимо передать объект в generate в качестве параметра code. Ключи должны быть именами файлов источников, а значения — содержимым исходных файлов.
Вот пример того, как это может выглядеть:
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.
© 2014-present Sebastian McKenzie
Licensed under the MIT License.
https://babeljs.io/docs/babel-generator/