Babel
Он стал важной цепочкой инструментов для разработки передовых инженерных систем, и@babel/preset-env
(Плагины и пресеты после babel7.0 имеют префикс @babel) — это часто используемый набор предустановленных плагинов,Babel
Китайская сеть еще не перевела часть содержания этой статьи.Babel
официальный документ на английском языке@babel/preset-env
Перевод контента, внешний интерфейс Xiaoxuo имеет ограниченный уровень английского шлака, добро пожаловать на исправление и обмен
@babel/preset-env
@babel/preset-env
умныйbabel
Предустановки, чтобы вы могли использовать последниеJavaScript
синтаксис, это поможет вам преобразовать код в синтаксис, поддерживаемый целевой операционной средой кода, повысить эффективность разработки и уменьшить упакованный код.
Установить
использоватьnpm
npm install --save-dev @babel/preset-env
использоватьyarn
yarn add @babel/preset-env --dev
Рабочий механизм
@babel/preset-env
Зависит от некоторых отличных проектов с открытым исходным кодом, таких какbrowserslist
, compat-table
, electron-to-chromium
...
Мы используем эти источники данных для поддержания и улучшенияBabel
Преобразование синтаксиса и реализация синтаксиса для поддержки синтаксиса и функций соответствующей версии целевой среды.
Уведомление
@babel/preset-env
не поддерживаетсяstage-x
плагин
@babel/preset-env
В любой целевой среде, которую вы укажете, проверьте наличие соответствующих подключаемых модулей и передайте их вBabel
Коллекция списков браузера
для браузера илиElectron
проекты, мы рекомендуем использовать.browserslistrc
В файле указывается цель компиляции. Если у вас уже есть этот файл конфигурации, он будет использоваться многими инструментами в экосистеме внешнего интерфейса, такими какautoprefixer
, stylelint
, eslint-plugin-compat
...
Если не настроенtargets
илиignoreBrowserslistConfig
, @babel/preset-env
будет использовать значение по умолчаниюBrowserslist
настроить
Если вы хотите поддерживать браузеры с долей рынка более 0,25% и игнорировать обновления безопасности, такие какIE 10
а такжеBlackBerry
Преобразование синтаксиса и реализация синтаксиса , вы можете использовать следующую конфигурацию
{
"presets": [
[
"@babel/preset-env",
{
"useBuiltIns": "entry"
}
]
]
}
.browserlistrc
> 0.25%
not dead
или вы можетеpackage.json
конфигурация в файле
"browserslist": "> 0.25%, not dead"
элемент конфигурации
Если вы хотите получить дополнительную документацию по элементам конфигурации и пресетам, см.preset options
Документация
targets
тип данных:string | Array<string> | { [string]: string }
, По умолчанию{}
Опишите целевую среду, которую поддерживает ваш проект
который может бытьbrowserslist-compatible
проверить предложение
{
"targets": "> 0.25%, not dead"
}
или объект, описывающий минимальную поддерживаемую версию среды
{
"targets": {
"chrome": "58",
"ie": "11"
}
}
среды, такие как:chrome
, opera
, edge
, firefox
, safari
, ie
, ios
, android
, node
, electron
Обратите внимание, что если вы не укажетеtargets
, @babel/prest-env
будет всеECMAScript 2015+
Код преобразован в соответствии с конфигурацией по умолчанию
Мы не рекомендуем это использование, так как оно не использует возможности поддержки определенных браузеров.
{
"presets": ["@babel/preset-env"]
}
targets.esmodules
тип данных:boolean
Если ваш код работает в браузере, который его поддерживаетES Modules
(woooooooo.EC-Code-international.org/EC-Code-262/6. …), когда указана следующая конфигурация,browers
поле будет проигнорировано, вы можете вписать<script type="module"></script>
В частности, предоставьте пользователям файлы кода меньшего размера (Джейк Арчибальд.com/2017/starve-to-touch…)
Примечание: если указано как таковое
esmodules
скомпилировать цель,browsers
поля будут игнорироваться
{
"presets": [
[
"@babel/preset-env",
{
"targets": {
"esmodules": true
}
}
]
]
}
targets.node
тип данных:string | "current" | true
Если ваша компиляция нацелена на текущийnode
версию можно указатьnode
элемент конфигурации, если вы укажете какcurren
, будет эквивалентно"node": process.versions.node
targets.safari
тип данных:string | "tp"
Если вы будете ориентироватьсяSafari
Технический обзор браузераtechnology preview
версия для компиляции, вы можете указать"safari": "tp"
targets.browsers
тип данных:string | Array<string>
подвигbrowserlist
параметры запроса, такие какlast 2 versions, > 5%, safari tp
Уведомление,browsers
Результат будетtargets
Переопределение конфликтующих элементов в
Примечание. Этот элемент конфигурации будет удален в более поздних версиях в пользу прямой настройки.
targets
в запрос
spec
тип данных:boolean
, По умолчаниюfalse
Настройте некоторые плагины или пресеты, которые разрешены, но потенциально медленнее.
loose
тип данных:boolean
, По умолчаниюfalse
Разрешить поддержкуloose transformations
плагины или пресеты
modules
тип данных:"amd" | "umd" | "systemjs" | "commonjs" | "cjs" | "auto" | false
, По умолчанию"auto"
разрешить преобразованиеES6
Синтаксис модуля для других типов модулей
Установить какfalse
не конвертирует модули
Уведомлениеcjs
даcommonjs
псевдоним
debug
тип данных:boolean
, По умолчаниюfalse
console.log
Выходная цель компиляции или используемый плагин находятся вplugin data version
версия указана в
include
тип данных:Array<string|RegExp>
, По умолчанию[]
набор часто включаемых плагинов
Допустимые конфигурации включают:
-
Babel plugins
,@babel/plugin-transform-spread
без префиксаplugin-transform-spread
оба поддерживают - Встроенные (поддерживает оба
cores-js@2
а такжеcores-js@3
, Такие какes.map
,es.set
, илиes.object.assign
)
Имена плагинов можно указывать полностью или частично, либо с помощью регулярных выражений.
Допустимый ввод:
- Полное имя (
string
):"es.math.sign"
- Наименование (
string
):"es.math.*"
(разбирается как все, начиная сes.math
с префиксом плагинов) - Обычный(
Object
):/^transform-.*$/
илиnew RegExp("^transform-modules-.*")
Обратите внимание, что в приведенном выше регулярном выражении.
Эквивалентно для соответствия всем символам, а не только.
И обратите внимание на регулярное выражение.*
а такжеglob
внутри*
Напротив
Этот параметр может быть полезен для отладки, если собственная реализация или раздел сочетает в себе неподдерживаемые функции и поддерживаемые функции.
Например,Node 4
родная поддержкаclasses
но не поддерживаетсяspread
, еслиsuper
и параметрыspread
использовать вместе,@babel/plugin-transform-classes
нужно бытьinclude
, иначе это не может быть переведено
Уведомление:
include
а такжеexclude
Опция вступит в силу только в том случае, если плагин включен по умолчанию, поэтому, например, включите@babel/plugin-proposal-do-expressions
или исключить@babel/plugin-proposal-function-bind
Будет сообщено об ошибке, если вы хотите использовать плагин, который не включен в предустановку, добавьте его непосредственно вplugins
exclude
тип данных:Array<string|RegExp>
, По умолчанию[]
Массив, который записывает не включенные или удаленные плагины
Возможна конфигурация сinclude
такие варианты, как
Эта опция эквивалентна черному списку, если вы не используетеgenerators
и при настройкеuseBuiltIns
не хочу включатьregeneratorRuntime
, или используйте другиеfast-async
замена плагинаBabel's async-to-gen
useBuiltIns
тип данных:"usage" | "entry" | false
, По умолчаниюfalse
Этот параметр настраивает@babel/preset-env
как с этим боротьсяpolyfill
когдаusage
илиentry
используется вариант,@babel/preset-env
будет пить прямоcores-js
Модули эквивалентны экспозицииimports
илиrequries
, Это местоcore-js
будет проанализирован непосредственно в самом файле и должен быть доступен
потому что@babel/polyfill
существуетBabel 7.4.0
Устарело, мы рекомендуем добавить его напрямуюcore-js
и черезcorejs
версия набора опций
npm install core-js@3 --save
# or
npm install core-js@2 --save
useBuiltIns: 'entry'
Примечание. Вы можете использовать его только один раз во всем приложении.
import "core-js
а такжеimport "regenerator-runtime/runtime"
, если вы используете@babel/polyfill
, которая включает в себяcore-js
а такжеregenerator-runtime
: Если вы импортируете его несколько раз или сообщаете об ошибке. Многократный импорт этих пакетов вызовет глобальные конфликты и другие проблемы, которые трудно отследить. Мы рекомендуем создать пакет, который содержит толькоimport
Заявленный файл с одной записью
Когда необходимо ввести разные записи на основе среды, разныеcore-js
, эта опция позволяет новому плагину заменитьimport "core-js/stable"
а такжеimport "regenerator-runtime/runtime"
заявление (илиrequire("corejs")
а такжеrequire("regenerator-runtime/runtime")
)
In
import "core-js";
Out (на основе разных сред)
import "core-js/modules/es.string.pad-start";
import "core-js/modules/es.string.pad-end";
представлять"core-js"
загружен для всех возможныхECMAScript
Синтаксис заполняет функции, если вы знаете, что вам нужны только некоторые из них при использованииcore-js@3
а также@babel/preset-env
, для каждогоcore-js
Ввод и оптимизация его зависимостей.Например, вы видите значения, которые необходимо заполнить методами массива и новымиMath
предложение:
In
import "core-js/es/array";
import "core-js/proposals/math-extensions";
Out (на основе разных сред)
import "core-js/modules/es.array.unscopables.flat";
import "core-js/modules/es.array.unscopables.flat-map";
import "core-js/modules/esnext.math.clamp";
import "core-js/modules/esnext.math.deg-per-rad";
import "core-js/modules/esnext.math.degrees";
import "core-js/modules/esnext.math.fscale";
import "core-js/modules/esnext.math.rad-per-deg";
import "core-js/modules/esnext.math.radians";
import "core-js/modules/esnext.math.scale";
ты можешь читатьcore-js
документы для получения информации о различных порталах
Примечание: при использовании
core-js@2
(использоватьcorejs: 2
элемент конфигурации или неявное использование),@babel/preset-env
также представит@babel/polyfill
. Это поведение устарело, потому что невозможно@babel/polyfill
использовать разныеcore-js
Версия
useBuiltIns: 'usage'
При использовании в файле добавьте определенный импорт для заполнения синтаксиса, мы используем его, упакованный файл будет загружать одно и то же дополнение синтаксиса только один раз.
In
a.js
var a = new Promise();
b.js
var b = new Map();
Out (если среда требует заполнения синтаксиса)
import "core-js/modules/es.promise";
var a = new Promise();
import "core-js/modules/es.map";
var b = new Map();
Out (если среда поддерживает синтаксис)
var a = new Promise();
var b = new Map();
useBuiltIns: false
Не добавлять автоматически заполнение синтаксиса в каждый файл, не преобразовыватьimport "core-js"
а такжеimport "@babel/polyfill"
заполнение для отдельных грамматик
corejs
структура данных:2, 3
или{ version: 2 | 3, proposals: boolean }
, По умолчанию2
Этот вариант будет работать только сuseBuiltIns: usage
илиuseBuiltIns: entry
Он вступит в силу только при совместном использовании, чтобы гарантировать, что@babel/preset-env
для тебяcore-js
Версия вводит правильный импорт
По умолчанию только стабильныйECMAScript
Синтаксическое заполнение атрибута вводится, у вас есть три способа сделать синтаксическое заполнение:
- когда используешь
useBuiltIns: "entry"
, вы можете напрямую ввестиproposal polyfill
:import "core-js/proposals/string-replace-all"