Опции
- Основные опции
- Опции загрузки конфигурации
- Конфигурация плагинов и пресетов
- Опции слияния конфигурации
- Опции карты исходного кода
- Разные опции
- Опции генератора кода
- Опции 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/