Spec-Zone.ru › Babel 7

Опции

  • Основные опции
  • Опции загрузки конфигурации
  • Конфигурация плагинов и пресетов
  • Опции слияния конфигурации
  • Опции карты исходного кода
  • Разные опции
  • Опции генератора кода
  • Опции AMD/UMD/SystemJS
  • Понятия опций

Опции могут быть переданы в Babel различными способами. При прямом передаче в Babel, можно передать объект опций. Когда Babel используется через обёртку, может быть необходимо или, по крайней мере, полезнее передать опции через файлы конфигурации.

При передаче опций через @babel/cli вам нужно будет kebab-case имена. Например:

npx babel --root-mode upward file.js # equivalent of passing the rootMode config option

Основные опции​

Эти опции разрешены только в рамках программно задаваемых опций Babel, поэтому они в основном предназначены для использования инструментами, которые обертывают Babel, или людьми, вызывающими babel.transform напрямую. Пользователи интеграций Babel, таких как babel-loader или @babel/register, вряд ли будут использовать их.

cwd​

Тип: string
По умолчанию: process.cwd()

Рабочий каталог, относительно которого будут разрешаться все пути в программно заданных опциях.

caller​

Тип: Объект со структурой

interface CallerData {
  name: string;
  supportsStaticESM?: boolean;
  supportsDynamicImport?: boolean;
  supportsTopLevelAwait?: boolean;
  supportsExportNamespaceFrom?: boolean;
}
История
Версия Изменения
v7.11.0 Добавить supportsExportNamespaceFrom
v7.7.0 Добавить supportsTopLevelAwait
v7.5.0 Добавить supportsDynamicImport

Инструменты могут передавать объект caller для идентификации себя Babel и передачи флагов, связанных с возможностями, для использования конфигурациями, пресетами и плагинами. Например

babel.transformFileSync("example.js", {
  caller: {
    name: "my-custom-tool",
    supportsStaticESM: true,
  },
});

позволило бы плагинам и пресетам решить, что, поскольку модули ES поддерживаются, они пропустят компиляцию модулей ES в модули CommonJS.

filename​

Тип: string

Имя файла, связанное с кодом, который в данный момент компилируется, если оно есть. Имя файла необязательно, но не вся функциональность Babel доступна, когда имя файла неизвестно, поскольку некоторые опции зависят от имени файла для своей работы.

Три основных случая, с которыми могут столкнуться пользователи:

  • Имя файла предоставляется плагинам. Некоторые плагины могут потребовать наличия имени файла.
  • Опции, такие как "test", "exclude" и "ignore", требуют имени файла для сопоставления строк/регулярных выражений.
  • .babelrc.json или .babelrc файлы загружаются относительно компилируемого файла. Если эта опция опущена, Babel будет вести себя так, как если бы babelrc: false был задан.

filenameRelative​

Тип: string
По умолчанию: path.relative(opts.cwd, opts.filename) (если "filename" был передан)

Используется в качестве значения по умолчанию для опции Babel sourceFileName, а также используется при генерации имён файлов для преобразований модулей AMD/UMD/SystemJS.

code​

Тип: boolean
По умолчанию: true

Значение по умолчанию для возвращаемого Babel значения включает свойства code и map с полученным сгенерированным кодом. В некоторых контекстах, где выполняется несколько вызовов Babel, может быть полезно отключить генерацию кода и вместо этого использовать ast: true для получения AST напрямую, чтобы избежать ненужной работы.

ast​

Тип: boolean
По умолчанию: false

По умолчанию Babel генерирует строку и карту исходного кода, но в некоторых контекстах может быть полезно получить сам AST. Основной случай использования – цепочка нескольких проходов преобразования, по принципу

const filename = "example.js";
const source = fs.readFileSync(filename, "utf8");

// Load and compile file normally, but skip code generation.
const { ast } = babel.transformSync(source, {
  filename,
  ast: true,
  code: false,
});

// Minify the file in a second pass and generate the output code here.
const { code, map } = babel.transformFromAstSync(ast, source, {
  filename,
  presets: ["minify"],
  babelrc: false,
  configFile: false,
});

Примечание: Эта опция не включена по умолчанию, потому что большинство пользователей в ней не нуждаются, и потому что мы хотим в конечном итоге добавить кэширование в Babel. Необходимо будет значительно больше места для кэширования структуры AST.

cloneInputAst​

Тип: boolean
По умолчанию: true
Добавлен в v7.11.0

По умолчанию babel.transformFromAst клонирует входной AST, чтобы избежать мутаций. Указание cloneInputAst: false может повысить производительность парсинга, если входной AST больше нигде не используется.

Опции загрузки конфигурации​

Загрузка конфигурации может быть немного сложной, так как в средах могут быть несколько типов файлов конфигурации, а эти файлы конфигурации могут иметь различные вложенные объекты конфигурации, которые применяются в зависимости от конфигурации.

root​

Тип: string
По умолчанию: opts.cwd
Позиция: Допускается только в программно заданных опциях Babel

Начальный путь, который будет обработан на основе "rootMode", чтобы определить концептуальную корневую папку для текущего проекта Babel. Это используется в двух основных случаях:

  • Базовая директория при проверке значения по умолчанию "configFile"
  • Значение по умолчанию для "babelrcRoots".

rootMode​

Тип: "root" | "upward" | "upward-optional"
По умолчанию: "root"
Позиция: Допускается только в программно заданных опциях Babel
Добавлен в: v7.1.0

Эта опция, в сочетании со значением "root", определяет, как Babel выбирает корень проекта. Разные режимы определяют различные способы, которыми Babel может обработать значение "root", чтобы получить конечный корень проекта.

Примечание: babel.config.json поддерживается с Babel 7.8.0. В более старых версиях Babel 7 поддерживается только babel.config.js.

  • "root" - Передает значение "root" без изменений.
  • "upward" - Переходит вверх от каталога "root", ищет каталог, содержащий файл babel.config.json, и выбрасывает ошибку, если файл babel.config.json не найден.
  • "upward-optional" - Переходит вверх от каталога "root", ищет каталог, содержащий файл babel.config.json, и возвращается к "root", если файл babel.config.json не найден.

"root" является режимом по умолчанию, поскольку он избегает риска того, что Babel случайно загрузит babel.config.json, который полностью находится вне текущей папки проекта. Если вы используете "upward-optional", знайте, что он будет проходить вверх по структуре каталогов до корня файловой системы, и всегда есть вероятность, что у кого-то будет забытый babel.config.json в домашней директории, что может привести к непредвиденным ошибкам в сборке.

Пользователи с проектами monorepo, которые выполняют сборки/тесты на основе каждого пакета, могут захотеть использовать "upward", поскольку в monorepo часто есть файл babel.config.json в корне проекта. Запуск Babel в подкаталоге monorepo без "upward", заставит Babel пропустить загрузку любого файла babel.config.json в корне проекта, что может привести к непредвиденным ошибкам и сбоям компиляции.

envName​

Тип: string
По умолчанию: process.env.BABEL_ENV || process.env.NODE_ENV || "development"
Позиция: Допускается только в программно заданных опциях Babel

Текущая активная среда, используемая во время загрузки конфигурации. Это значение используется в качестве ключа при разрешении конфигураций "env", а также доступно внутри функций конфигурации, плагинов и пресетов через функцию api.env().

configFile​

Тип: string | boolean
По умолчанию: path.resolve(opts.root, "babel.config.json"), если он существует, false в противном случае
Позиция: Допускается только в программно заданных опциях Babel

По умолчанию ищет файл конфигурации по умолчанию babel.config.json, но может быть передан путь к любому файлу конфигурации JS или JSON5.

ПРИМЕЧАНИЕ: эта опция не влияет на загрузку файлов .babelrc.json, поэтому, хотя может быть соблазнительно сделать configFile: "./foo/.babelrc.json", это не рекомендуется. Если указанный .babelrc.json загружается через стандартную логику, связанную с файлом, вы получите загрузку одного и того же файла конфигурации дважды, сливая его с самим собой. Если вы связываете конкретный файл конфигурации, рекомендуется придерживаться схемы имён, независимой от имени "babelrc".

babelrc​

Тип: boolean
По умолчанию: true при условии, что опция filename была указана
Позиция: Допускается в программно заданных опциях Babel или внутри загруженного "configFile". Программная опция переопределит опцию файла конфигурации.

true позволит искать файлы конфигурации относительно "filename", предоставленного Babel.

Значение babelrc, переданное в программируемых параметрах, переопределит значение, заданное в файле конфигурации.

Примечание: файлы .babelrc.json загружаются только в том случае, если текущий "filename" находится внутри пакета, соответствующего одному из "babelrcRoots" пакетов.

babelrcRoots​

Тип: boolean | MatchPattern | Array<MatchPattern>
Значение по умолчанию: opts.root
Размещение: Разрешено в программируемых параметрах Babel или внутри загруженного configFile. Программируемый параметр переопределит значение из файла конфигурации.

По умолчанию Babel будет искать файлы .babelrc.json только внутри пакета "root", так как в противном случае Babel не сможет определить, должен ли данный .babelrc.json загружаться, или установлены ли "plugins" и "presets", так как компилируемый файл может находиться внутри node_modules, или был связан с проектом через символическую ссылку.

Этот параметр позволяет пользователям указать список других пакетов, которые следует считать "корневыми" пакетами при определении, следует ли загружать файлы .babelrc.json.

Например, настройка монорепозитория, которая хочет разрешить отдельным пакетам иметь свои собственные конфигурации, может сделать так

babelrcRoots: [
  // Keep the root as a root
  ".",

  // Also consider monorepo packages "root" and load their .babelrc.json files.
  "./packages/*",
];

Параметры плагинов и пресетов​

plugins​

Тип: Array<PluginEntry | Plugin> (PluginEntry)
Значение по умолчанию: []

Массив плагинов, которые нужно активировать при обработке этого файла. Более подробную информацию о взаимодействии отдельных элементов, особенно при использовании в нескольких вложенных конфигурациях "env" и "overrides", см. в разделе слияние.

Примечание: параметр также позволяет использовать экземпляры Plugin из самого Babel, но прямое использование не рекомендуется. Если вам нужно создать постоянное представление плагина или пресета, используйте babel.createConfigItem().

presets​

Тип: Array<PresetEntry> (PresetEntry)
Значение по умолчанию: []

Массив пресетов, которые нужно активировать при обработке этого файла. Более подробную информацию о взаимодействии отдельных элементов, особенно при использовании в нескольких вложенных конфигурациях "env" и "overrides", см. в разделе слияние.

Примечание: формат пресетов идентичен плагинам, за исключением того, что нормализация имен ожидает "preset-" вместо "plugin-", и пресеты не могут быть экземплярами Plugin.

passPerPreset​

Тип: boolean
Значение по умолчанию: false
Статус: Устаревший

Инструктирует Babel на выполнение каждого из пресетов в массиве presets как независимого прохода. Этот параметр может вводить много путаницы относительно точного порядка плагинов, но может быть полезен, если вам абсолютно необходимо выполнить набор операций как независимые проходы компиляции.

Примечание: Этот параметр может быть удален в будущих версиях Babel по мере добавления лучшей поддержки определения порядка плагинов.

Цели вывода​

targets​

Тип: string | Array<string> | { [string]: string }
Значение по умолчанию: {}
Размещение: Разрешено в программируемых параметрах Babel или в файлах конфигурации
Добавлен в: v7.13.0

История
Версия Изменения
v7.20.0 Поддержка deno цели
v7.15.0 Поддержка rhino цели

Определяет среды, которые вы поддерживаете/для которых предназначен ваш проект.

Это может быть запрос, совместимый с browserslist (с ограничениями):

{
  "targets": "> 0.25%, not dead"
}

Или объект с минимальными версиями поддерживаемых сред:

{
  "targets": {
    "chrome": "58",
    "ie": "11"
  }
}

Поддерживаемые среды: android, chrome, deno, edge, electron, firefox, ie, ios, node, opera, rhino, safari, samsung.

Если не указана второстепенная версия, Babel будет интерпретировать её как MAJOR.0. Например, "node": 12 будет считаться как Node.js 12.0.

Отсутствие целей​

Когда цели не указаны: Babel предполагает, что вы нацелены на самые старые возможные браузеры. Например, @babel/preset-env преобразует весь код ES2015-ES2020 в совместимый с ES5.

Рекомендуется установить targets для уменьшения размера выходного кода.

{
  "presets": ["@babel/preset-env"]
}

Из-за этого поведение Babel отличается от browserslist: оно не использует запрос defaults в случае отсутствия целей в вашей конфигурации Babel или browserslist. Если вы хотите использовать запрос defaults , вам нужно явно указать его как цель:

{
  "targets": "defaults"
}

Мы признаём, что это не идеально и пересмотрим это в Babel v8.

targets.esmodules​

Тип: boolean

Вы также можете нацеливаться на браузеры, поддерживающие ES Модули (https://www.ecma-international.org/ecma-262/6.0/#sec-modules). Когда указана цель esmodules, она будет пересекаться с целью browsers и целями browserslist. Вы можете использовать этот подход в сочетании с <script type="module"></script> для условной подачи меньших скриптов пользователям (https://jakearchibald.com/2017/es-modules-in-browsers/#nomodule-for-backwards-compatibility).

Обратите внимание: при указании как browsers , так и цели esmodules, они будут пересекаться.

{
  "targets": {
    "esmodules": true
  }
}

targets.node​

Тип: string | "current" | true.

Если вы хотите скомпилировать против текущей версии Node, вы можете указать "node": true или "node": "current", что будет эквивалентно "node": process.versions.node.

В качестве альтернативы, вы можете указать версию Node в запросе browserslist:

{
  "targets": "node 12" // not recommended
}

В этом случае browserslist определит её как последнюю доступную версию в библиотеке node-releases. Поскольку Node.js может поддерживать новые возможности языка в незначащих выпусках, программа, сгенерированная для Node.js 12.22, может выдать синтаксическую ошибку на Node.js 12.0. Мы рекомендуем всегда указывать второстепенную версию при использовании запросов node с browserslist:

{
  "targets": "node 12.0"
}

targets.safari​

Тип: string | "tp".

Если вы хотите скомпилировать против технологического предварительного просмотра версии Safari, вы можете указать "safari": "tp".

targets.browsers​

Тип: string | Array<string>.

Запрос для выбора браузеров (например: последние 2 версии, > 5%, safari tp) с использованием browserslist.

Обратите внимание, результаты браузеров переопределяются явными элементами из targets.

targets.deno​

Тип: string.

Минимальная поддерживаемая версия — 1.0.

{
  "targets": {
    "deno": "1.9"
  }
}

browserslistConfigFile​

Тип: boolean
Значение по умолчанию: true
Добавлен в: v7.13.0

Включает или отключает использование источников конфигурации browserslist, что включает поиск файлов browserslist или ссылку на ключ browserslist в package.json. Это полезно для проектов, которые используют конфигурацию browserslist для файлов, которые не будут компилироваться с помощью Babel.

Если указана строка, она должна представлять путь к файлу конфигурации browserslist. Относительные пути разрешаются относительно файла конфигурации, в котором указан этот параметр, или к cwd при передаче в качестве части программируемых параметров.

browserslistEnv​

Тип: string
Значение по умолчанию: undefined
Добавлен в: v7.13.0

Среда Browserslist для использования.

Параметры слияния конфигураций​

extends​

Тип: string
Размещение: Не разрешено внутри пресетов

Конфигурации могут "расширять" другие файлы конфигурации. Поля конфигурации в текущей конфигурации будут слиты поверх конфигурации расширяемого файла.

env​

Тип: { [envKey: string]: Options }
Размещение: Не может быть вложенным внутри другого env блока.

Позволяет задавать вложенные опции конфигурации, которые будут включены только если envKey соответствует опции envName.

Примечание: Опции env[envKey] будут слиты поверх опций, указанных в корневом объекте.

overrides​

Тип: Array<Options>
Размещение: Не может быть вложенным внутри другого overrides объекта или внутри env блока.

Позволяет пользователям предоставить массив опций, которые будут слиты в текущую конфигурацию по одной за раз. Данная функция лучше всего используется вместе с опциями "test"/"include"/"exclude" для определения условий, при которых должна применяться настройка. Например:

overrides: [{
  test: "./vendor/large.min.js",
  compact: true,
}],

можно использовать для включения опции compact для одного конкретного файла, который известен как большой и сжатый, и сообщить Babel, чтобы он не пытался красиво вывести файл.

test​

Тип: MatchPattern | Array<MatchPattern> (MatchPattern)

Если ни одна из шаблонов не соответствует, текущий объект конфигурации считается неактивным и игнорируется во время обработки конфигурации. Эта опция наиболее полезна, когда используется внутри объекта опций overrides, но разрешена в любом месте.

Примечание: Эти переключатели не влияют на программные и опции загрузки конфигурации в предыдущих разделах, поскольку они учитываются задолго до конфигурации, подготовленной для слияния.

include​

Тип: MatchPattern | Array<MatchPattern> (MatchPattern)

Эта опция является синонимом для "test".

exclude​

Тип: MatchPattern | Array<MatchPattern> (MatchPattern)

Если какой-либо из шаблонов совпадает, текущий объект конфигурации считается неактивным и игнорируется при обработке конфигурации. Эта опция наиболее полезна, когда используется внутри объекта опций overrides, но разрешена в любом месте.

Примечание: Эти переключатели не влияют на программные и опции загрузки конфигурации в предыдущих разделах, поскольку они учитываются задолго до конфигурации, подготовленной для слияния.

ignore​

Тип: Array<MatchPattern> (MatchPattern)
Размещение: Не разрешено внутри пресетов

Если какой-либо из шаблонов соответствует, Babel немедленно остановит всю обработку текущей сборки. Например, пользователь может захотеть сделать что-то вроде

ignore: ["./lib"];

чтобы явно отключить компиляцию Babel файлов внутри каталога lib.

Примечание: Эта опция отключает всю обработку Babel файла. Хотя это имеет свои применения, стоит также рассмотреть опцию "exclude" как менее агрессивную альтернативу.

only​

Тип: Array<MatchPattern> (MatchPattern)
Размещение: Не разрешено внутри пресетов

Если ни один из шаблонов не соответствует, Babel немедленно остановит всю обработку текущей сборки. Например, пользователь может захотеть сделать что-то вроде

only: ["./src"];

чтобы явно включить компиляцию Babel файлов внутри каталога src и отключить все остальное.

Примечание: Эта опция отключает всю обработку Babel файла. Хотя это имеет свои применения, стоит также рассмотреть опции "test"/"include" как менее агрессивную альтернативу.

Параметры карты исходного кода​

inputSourceMap​

Тип: boolean | SourceMap
По умолчанию: true

true попытается загрузить карту исходного кода из самого файла, если он содержит комментарий //# sourceMappingURL=.... Если карта не найдена или не удаётся загрузить и обработать, она будет молча отброшена.

Если указан объект, он будет обработан как сам объект карты исходного кода.

sourceMaps​

Тип: boolean | "inline" | "both"
По умолчанию: false

  • true для генерации карты исходного кода для кода и включения её в результирующий объект.
  • "inline" для генерации карты исходного кода и добавления её как URL данных в конец кода, но не включать её в результирующий объект.
  • "both" то же самое, что и встроенный, но включит карту в результирующий объект.

@babel/cli переопределяет некоторые из них, чтобы также повлиять на то, как карты записываются на диск:

  • true запишет карту в файл .map на диске
  • "inline" запишет файл непосредственно, поэтому он будет содержать data:, содержащую карту
  • "both" запишет файл с data: URL и также с .map.

Примечание: Эти опции немного странные, поэтому, возможно, лучше всего просто использовать true и обрабатывать остальное в собственном коде, в зависимости от вашего случая использования.

sourceMap​

Это синоним для sourceMaps. Рекомендуется использовать sourceMaps.

sourceFileName​

Тип: string
По умолчанию: path.basename(opts.filenameRelative) при доступности или "unknown"

Имя, которое следует использовать для файла внутри объекта карты исходного кода.

sourceRoot​

Тип: string

Поля sourceRoot для установки в сгенерированной карте исходного кода, если она требуется.

Дополнительные параметры​

sourceType​

Тип: "script" | "module" | "unambiguous"
По умолчанию: "module"

  • "script" - Парсинг файла с использованием грамматики скриптов ECMAScript. Заявления import/export не разрешены, и файлы не в строгом режиме.
  • "module" - Парсинг файла с использованием грамматики модулей ECMAScript. Файлы автоматически в строгом режиме, и разрешены заявления import/export.
  • "unambiguous" - Считать файл "модулем", если присутствуют заявления import/export, или же считать его "скриптом".

unambiguous может быть очень полезен в ситуациях, когда тип неизвестен, но может привести к ложным совпадениям, так как вполне допустимо иметь файл модуля, который не использует import/export операторов.

Этот параметр важен, потому что тип текущего файла влияет как на парсинг входных файлов, так и на определённые преобразования, которые могут захотеть добавить использование import/require в текущий файл.

Например, @babel/plugin-transform-runtime полагается на тип текущего документа, чтобы решить, вставлять объявление import, или вызов require(). @babel/preset-env также делает то же самое для своей опции "useBuiltIns". Поскольку Babel по умолчанию рассматривает файлы как ES модули, как правило, эти плагины/пресеты вставляют import операторы. Установка правильного sourceType может быть важной, так как неправильный тип может привести к случаям, когда Babel вставит import операторы в файлы, которые предназначены для файлов CommonJS. Это особенно важно в проектах, где происходит компиляция node_modules зависимостей, потому что вставка import операторов может привести к тому, что Webpack и другие инструменты будут видеть файл как ES модуль, сломав то, что в противном случае было бы работоспособным файлом CommonJS.

Примечание: Этот параметр не повлияет на парсинг .mjs файлов, так как они в настоящее время жестко закодированы для парсинга как "module" файлы.

assumptions​

Тип: { [assumption: string]: boolean }
По умолчанию: {}
Добавлено в: v7.13.0
Размещение: Разрешено в программных опциях, файлах конфигурации и пресетах.

Установите предположения, которые Babel может сделать, чтобы получить меньший вывод:

{
  "assumptions": {
    "iterableIsArray": true
  },
  "presets": ["@babel/preset-env"]
}

Для получения дополнительной информации см. страницу документации предположения.

highlightCode​

Тип: boolean
По умолчанию: true

Подсветка токенов в фрагментах кода в сообщениях об ошибках Babel для повышения читабельности.

wrapPluginVisitorMethod​

Тип: (key: string, nodeType: string, fn: Function) => Function

Позволяет пользователям добавлять обёртку вокруг каждого посетителя, чтобы просматривать процесс посетителя по мере выполнения плагинов Babel.

  • key — простая нечитаемая строка, представляющая выполняемый плагин.
  • nodeType — тип узла AST, который в настоящее время посещается.
  • fn — сама функция посетителя.

Пользователи могут вернуть функцию-замену, которая должна вызвать исходную функцию после выполнения любых действий по ведению журнала и анализу, которые они хотят сделать.

END_OF_DOCUMENT_MARKER

parserOpts​

Тип: {}

Непрозрачный объект, содержащий параметры для передачи парсеру.

Доступные параметры парсера см. в Параметрах парсера.

generatorOpts​

Тип: {}

Непрозрачный объект, содержащий параметры для передачи генератору кода. Самые используемые параметры см. в Параметрах генератора кода.

Параметры генератора кода​

retainLines​

Тип: boolean
По умолчанию: false

Babel постарается сгенерировать код так, чтобы элементы печатались на той же строке, что и в исходном файле. Этот параметр существует для пользователей, которые не могут использовать карты исходного кода, чтобы получить примерно полезные номера строк ошибок, но это только попытка, и не гарантируется во всех случаях со всеми плагинами.

compact​

Тип: boolean | "auto"
По умолчанию: "auto"

"auto" установит значение, оценив code.length > 500_000

Все необязательные новые строки и пробелы будут опущены при генерации кода в компактном режиме.

minified​

Тип: boolean
По умолчанию: false

Включает compact: true, опускает разделительные точки в конце блоков, опускает () из new Foo() когда это возможно и может выводить более короткие версии литералов.

auxiliaryCommentBefore​

Тип: string

Позволяет указать префиксный комментарий для вставки перед фрагментами кода, отсутствовавшими в исходном файле.

Примечание: Определение того, что присутствует, а что отсутствует в исходном файле, может быть сложным, поэтому использование этого параметра не рекомендуется. Если вам нужно каким-то образом аннотировать код, лучше использовать плагин Babel.

auxiliaryCommentAfter​

Тип: string

Позволяет указать префиксный комментарий для вставки после фрагментов кода, отсутствовавших в исходном файле.

Примечание: Определение того, что присутствует, а что отсутствует в исходном файле, может быть сложным, поэтому использование этого параметра не рекомендуется. Если вам нужно каким-то образом аннотировать код, лучше использовать плагин Babel.

comments​

Тип: boolean
По умолчанию: true

Предоставляет состояние комментариев по умолчанию для shouldPrintComment если не задана функция. Дополнительную информацию см. в значении параметра по умолчанию.

shouldPrintComment​

Тип: (value: string) => boolean
По умолчанию без minified: (val) => opts.comments || /@license|@preserve/.test(val)
По умолчанию с minified: () => opts.comments

Функция, определяющая, следует ли включать данный комментарий в выходной код Babel.

Расширенное использование​

Дополнительные параметры генератора см. в Параметрах генератора.

Параметры модулей AMD/UMD/SystemJS​

moduleIds​

Тип: boolean
По умолчанию: !!opts.moduleId

Включает генерацию идентификаторов модулей.

moduleId​

Тип: string

Жестко заданный идентификатор для использования в модуле. Не может использоваться вместе с getModuleId.

getModuleId​

Тип: (name: string) => string

Принимая имя модуля, сгенерированное Babel, возвращает имя для использования. Возврат ложного значения будет использовать исходное значение name.

moduleRoot​

Тип: string

Корневой путь для включения в сгенерированные имена модулей.

Концепции параметров​

MatchPattern​

Тип: string | RegExp | (filename: string | void, context: { caller: { name: string } | void, envName: string, dirname: string ) => boolean

Несколько параметров Babel выполняют проверки по отношению к путям файлов. В целом, эти параметры поддерживают подход к шаблонам, где каждый шаблон может быть

  • string - Путь к файлу с простой поддержкой * и ** в качестве полных совпадений. Любой файл или родительская папка, соответствующая шаблону, считается совпадением. Путь следует обычной логике путей Node, поэтому на POSIX он должен быть разделен символом /, но на Windows поддерживаются как /, так и \.
  • RegExp - Регулярное выражение для сопоставления с нормализованным именем файла. На POSIX регулярное выражение для пути будет работать с путём, разделённым символом /, а на Windows — с путём, разделённым символом \.

Важно, что если используется любой из этих вариантов, Babel требует, чтобы параметр filename был присутствующим, и в противном случае будет считаться ошибкой.

  • (filename: string | void, context: { caller: { name: string } | void, envName: string, dirname: string }) => boolean — общая обратная функция, которая должна возвращать булево значение, указывающее, является ли это соответствием или нет. Функции передаются имя файла или undefined если таковой не был предоставлен Babel. Также передаются текущие параметры envName и caller которые были указаны в вызове Babel на верхнем уровне и dirname это либо каталог конфигурационного файла, либо текущий рабочий каталог (если преобразование было вызвано программно).

Объединение​

См. Как Babel объединяет элементы конфигурации.

Элементы плагинов/пресетов​

PluginEntry / PresetEntry​

Отдельные элементы плагинов/пресетов могут иметь несколько различных структур:

  • EntryTarget - Отдельный плагин
  • [EntryTarget, EntryOptions] - Отдельный плагин с параметрами
  • [EntryTarget, EntryOptions, string] - Отдельный плагин с параметрами и именем (см. объединение для получения дополнительной информации об именах)
  • ConfigItem - Элемент конфигурации плагина, созданный babel.createConfigItem().

Один и тот же EntryTarget может использоваться несколько раз, если каждому из них не присвоено другое имя, и в этом случае возникнет ошибка дублирующего плагина/пресета.

Это может быть немного трудно прочитать, поэтому в качестве примера:

plugins: [
  // EntryTarget
  '@babel/plugin-transform-classes',

  // [EntryTarget, EntryOptions]
  ['@babel/plugin-transform-arrow-functions', { spec: true }],

  // [EntryTarget, EntryOptions, string]
  ['@babel/plugin-transform-for-of', { loose: true }, "some-name"],

  // ConfigItem
  babel.createConfigItem(require("@babel/plugin-transform-spread")),
],

EntryTarget​

Тип: string | {} | Function

Целевая область плагина/пресета может исходить из нескольких источников:

  • string - Путь в стиле require или идентификатор плагина/пресета. Идентификаторы будут переданы через нормализацию имён.
  • {} | Function - Фактический объект/функция плагина/пресета после её require().

EntryOptions​

Тип: undefined | {} | false

Параметры передаются каждому плагину/пресету при их выполнении. undefined будет нормализован до пустого объекта.

false указывает, что элемент полностью отключен. Это может быть полезно в контекстах, где порядок важен, но требуется отдельное условие для определения того, включен ли элемент. Например:

plugins: [
  'one',
  ['two', false],
  'three',
],
overrides: [{
  test: "./src",
  plugins: [
    'two',
  ]
}]

включит плагин two для файлов в src, но two по-прежнему будет выполняться между one и three.

Нормализация имён​

По умолчанию Babel ожидает, что у плагинов будет префикс babel-plugin- или babel-preset- в их имени. Чтобы избежать повторения, Babel имеет фазу нормализации имён, которая автоматически добавит эти префиксы при загрузке элементов. Это сводится к нескольким основным правилам:

  • Абсолютные пути проходят без изменений.
  • Относительные пути, начинающиеся с ./ проходят без изменений.
  • Ссылки на файлы внутри пакета не изменяются.
  • Любой идентификатор, начинающийся с module: , будет иметь префикс удалён, но в остальном не изменится.
  • plugin-/preset- будет внедрен в начале любого @babel-области пакета, который не имеет его в качестве префикса.
  • babel-plugin-/babel-preset- будет внедрен как префикс любого нескопированного пакета, который не имеет его в качестве префикса.
  • babel-plugin-/babel-preset- будет внедрен как префикс любого @-области пакета, который не имеет его везде в своём имени.
  • babel-plugin/babel-preset будет внедрен в качестве имени пакета, если указано только имя @-области.

Вот несколько примеров, когда они применяются в контексте плагина:

Входные данные Нормализованные
"/dir/plugin.js" "/dir/plugin.js"
"./dir/plugin.js" "./dir/plugin.js"
"mod" "babel-plugin-mod"
"mod/plugin" "mod/plugin"
"babel-plugin-mod" "babel-plugin-mod"
"@babel/mod" "@babel/plugin-mod"
"@babel/plugin-mod" "@babel/plugin-mod"
"@babel/mod/plugin" "@babel/mod/plugin"
"@scope" "@scope/babel-plugin"
"@scope/babel-plugin" "@scope/babel-plugin"
"@scope/mod" "@scope/babel-plugin-mod"
"@scope/babel-plugin-mod" "@scope/babel-plugin-mod"
"@scope/prefix-babel-plugin-mod" "@scope/prefix-babel-plugin-mod"
"@scope/mod/plugin" "@scope/mod/plugin"
"module:foo" "foo"

© 2014-present Sebastian McKenzie
Licensed under the MIT License.
https://babeljs.io/docs/options/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API