Подробное объяснение использования babel и его конфигурации .babelrc

внешний интерфейс JavaScript React.js Babel

 

Babel

 

Официальное введение: Преобразование кода JavaScript ECMAScript 2015 и более поздних версий в код JavaScript старой версии браузера или обратно совместимой версии в среде.

Короче говоря, это преобразование несовместимого кода JavaScript в совместимый исполняемый код JavaScript.

 

Функция:

 

Преобразование синтаксиса

Добавьте некоторые функции полифилла совместимости

Преобразование исходного кода и т. д.

 

Простой предварительный просмотр конфигурации:

 

{
    "plugins": [],  // 插件配置
    "presets": []   // 预设配置
}
 
// 这里 .babelrc 配置的
 
 
// 官网建议用 module 的形式来配置,bable.config.js
 
const presets = []
const plugins = []
module.exports =  { presets, plugins }

 

Введение в конфигурацию:

 

Предустановки: представляет собой сборник плагина определенного типа, включая все функции определенного типа плагина.

Плагин: код, преобразованный в браузер, может выполнять код.

 

 

Составить порядок выполнения:

 

1. Выполнить все плагины в плагинах

2. Плагины плагинов компилируются по порядку

3. Все плагины плагинов выполняются, и пресеты выполняются.

4. пресеты пресеты выполняются в обратном порядке. (выполнять с последнего)

5, полная компиляция.

 

1, введение основного плагина

 

babel-preset-es2015 (коллекция плагинов ES2015/ES6)

Преобразование кода JavaScript ES2015 (es6) в код JavaScript, совместимый с браузером

 

стрелочные функции: стрелочные функции

block-scoped-functions : способ именования функций изменен на форму присваивания

блок-область: пусть для var

классы: преобразование класса es6

Вычисляемые свойства: Преобразование имен свойств, таких как: var obj = {['x'+a]: 1}

деструктурирование : преобразование деструктора

дубликаты ключей: оптимизация атрибутов

for-of: преобразование for of

имя_функции : оптимизировать имя функции

InstanceOF: Instance Offration

литералы : различные типы оптимизации репликации

новая цель: наследование расширяет преобразование

объект-супер: супер трансформация

Параметры: params, (a=1,b=2)=>{} , преобразование параметра по умолчанию

сокращенные свойства: преобразование свойств объекта {a,b} => {a:a,b:b}

распространение : преобразование расширенного атрибута {...другое}

sticky-regex : оптимизация регулярных выражений, созданная с помощью нового регулярного выражения

шаблонные литералы: строковые шаблоны

typeof-symbol : преобразование символов

unicode-regex : конвертировать обычные совпадающие строки в юникод

babel-preset-es2016 (коллекция плагинов ES2016/ES7)

Преобразование кода JavaScript ES2016 (es7) в код, совместимый с браузером

 

оператор возведения в степень : преобразование возведения в степень x **= 3 , третья степень x

 

 

babel-preset-es2017 (коллекция плагинов ES2017/es8)

Преобразование кода ES2017 (es8)

 

async-to-generator: преобразование async/await в функцию генератора

 

 

babel-preset-stage-x (коллекция плагинов ES2018/stage)

Преобразование кода в стадии стадии

 

async-generator-function: преобразование асинхронных функций

dotall-regex : оптимизация точечного регулярного выражения

object-rest-spread : оптимизация структуры анализа

option-catch-binding: catch плюс, наконец, оптимизация

unicode-свойство-regex

 

Модули

модули-amd/модули-commonjs/модули-systemjs/модули-umd

Преобразование различных экспортных значений x по умолчанию в различные формы модуля amd / commonjs / systemjs / umd

 

 

Экспериментальный (экспериментальная фаза)

 

class-properties: статическое преобразование свойств класса

декораторы : преобразования декораторов

do-выражения

export-default-from : оптимизация экспорта

export-namespace-from : оптимизация экспорта

function-bind : преобразование функции привязки, obj::fun => fun.bind(obj) ::obj.fun => obj.fun(obj)

функция отправлена

логические операторы присваивания

нулевой-объединяющий-оператор

Числовой разделитель

необязательная цепочка

оператор трубопровода

Throw-выражения

 

БытьМинификация (Вавилон-минимизация)

Используйте сжатие кода для оптимизации пресетов плагинов

 

...

Здесь вы можете перейти на официальный сайт, чтобы проверить...

 

babel-preset-react (коллекция реакций)

Релевантная компиляция и преобразование реакции...

Преобразование jsx и элемента

Просто добавьте реагирующие пресеты напрямую.

 

Другие плагины

jscript: именование строгого режима

object-assign : назначить конверсию

регенератор: преобразование функции генератора

object-set-prototype-of-to-assign : преобразование setPrototype

время выполнения

 

 

2. Знакомство с основными пресетами

@ Babel / Preset-Dev

 

умная предустановка.

Автоматически определяйте плагины и полифиллы babel на основе браузеров и сред выполнения.

Без какой-либо настройки, то же, что и babel-preset-latest (используется с es2015/es2016/es2017).

{
  "presets": [ "dev" ] 
}

Конфигурация и ее подробное объяснение:

{
  "presets": [
    [
      '@babel/preset-env',
      {
        'target':{
          "browser":["ie>=8","chrome>=62"],
          "node":"8.9.0",
          "safari":"tp"
        },
        "modules":false,
        "debug":true,
        "uglify":true
        "useBuiltIns":true
      }
    ]
  ]
}

target : описывает поддерживаемую/целевую среду, которую вы настроили для своего проекта.

browsers: поддержка браузера, вернет список поддерживаемых браузеров. будет перезаписан target.ie

[ 'ie>=8' ] среда, поддерживающая ie8

"по умолчанию" по умолчанию

node : укажите среду узла, и вы можете указать версию

сафари: версия сафари

модули: включить es6 в другие модули

отладка: включить ли console.log

include/exclude: функции плагина, которые должны быть включены/функции плагина, которые не включены

uglify : сжать код

использоватьВстроенные:

False : ссылка на все babel-polyfills, добавление записи babel-polyfill в webpack:

.entry:['babel-polyfill', 'index.js'] , ссылаться на все полифиллы, объем становится больше

true : в справочной части, в соответствии с настроенной средой Preset-env, обратитесь к polyfill ,

Для ссылки на babel-polyfill в файле ввода

 

 

@babel/preset-react

Это некоторые коллекции, связанные с реакцией

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

Stage-x

Предварительная тяга ..

Эта коллекция плагинов не существует в коллекции preset-env, поэтому на нее нужно ссылаться....

 

 

3. Метод, совместимый с Babel-polyfill

 

Предварительная установка Babel преобразует только новый синтаксис Javascript, а не новый API.

Например: Генератор/Набор/Карта и т.д.

Это означает, что в коде, преобразованном в вавилон, все еще есть несовместимые коды.

 

принцип:

Babel-folyfill заключается в изменении прототипа глобального объекта, добавлении несовместимых методов API или изменении несовместимых методов API.

 

Применение:

 

1. Добавьте вверху входного файла:

require('@babel-polyfill');
 
import '@babel-polyfill'

2. Добавить в вебпак

 

{
  entry:['@babel-polyfill','./app.js']
}

Добавьте его в файл конфигурации webpack.

 

3. Ссылка непосредственно в html перед упаковкой js-файлов

 

 

4. Плагин времени выполнения преобразования

 

Снова преобразуйте код, преобразованный babel, чтобы разрешить несовместимые глобальные API, такие как babel-polyfill.

В отличие от babel-polyfill он не добавляет/не изменяет глобальные объекты.

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

Когда требуется совместимое преобразование, на него ссылаются на среду выполнения преобразования.

transform-runtime зависит от babel-runtime, и все вспомогательные методы относятся к babel-runtime.

 

Функции:

Не загрязняет глобальные переменные, потому что глобальные объекты не изменяются

Невозможно изменить экземпляр, поэтому некоторые методы не могут быть реализованы.

 

["transform-runtime", {
    "corejs":false, "helpers": false, "polyfill": false, "regenerator": true, "moduleName": "babel-runtime" }]

helpers : использовать ли @babel-runtime/helpers вместо внутренних помощников

coresjs: следует ли заменить такие методы, как Map/Set, вспомогательными методами в @babel-runtime/corejs

polyfill : использовать ли вспомогательные функции @babel-runtime вместо полифилов

regenerator: использовать ли вспомогательные функции вместо асинхронных/генераторных функций

moduleName : имя ссылки

 

 

5, @ вавилонский регистр

 

Используйте @babel-register для регистрации всего текущего кода, который необходимо перекодировать.

 

var fs = require('fs');
var babelConfig = JSON.parse(fs.readFileSync('./.babelrc'));
require('babel-register')(babelConfig);

Очевидно, что здесь можно передать файл конфигурации .babelrc для настройки транскодирования.

Просто нужно добавить в файл записи.

Таким образом, на стороне узла можно реализовать транскодирование Babel.

 

6. инструменты

babel-parser: парсер babel для разбора Javascript/jsx/Typescript/flow и другого кода

babel-core: основной файл babel, используемый для транскодирования.

Babel-генератор: преобразование кода, исходный код и код преобразования

babel-code-frame : сопоставление транскодирования, такое как позиция преобразования кода

babel-helpers : вспомогательные методы

babel-runtime: предоставляет несколько вспомогательных методов для столбцов, похожих на полифилл.

...

 

 

Инструмент командной строки @bable/babel-cli

 

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

 

Применение:

babel  input.js -options
// 编译 input.js  文件

Конфигурация:

-o : выходной путь

-W: контролировать файлы компиляции, компилировать в реальном времени

-s : выходная исходная карта, которую можно интровертировать

-d : при компиляции каталога -d печатает каталог

--ignore : файлы для игнорирования

--plugins : использовать плагины, разделенные ,

--presets : использовать пресеты, разделенные ,

--config-file : использовать путь к файлу .babelrc

 

 

Детали конфигурации .babelrc

 

Преобразования конфигурации играют три разные роли в Babel:

1. Конфигурация экранирования синтаксиса. Preset-env/stage-x в основном используется для экранирования синтаксиса es,

2. Конфигурация, используемая для патча, то есть конфигурация полифилла. Преимущественно преобразование времени выполнения.

3. Конфигурация под разные фреймворки, такие как: jsx/flow react и т.д.

 

пример:

{
  "presets":[
    "react",
    ["env",{...}],
    "stage-0"
  ],
  "plugins":[
    "pluginName",
    ["transform-runtime",{...}]
  ],
  "ignore":["path",'file'],
  "miniied":boolean,
  "comments":boolean,
  "env":{
    "test":{
      "presets":[],
      "plugins":[]
    }
  },
  ...
}

Основная конфигурация

пресеты: пресеты, набор плагинов, выполняемых в обратном порядке

Плагины: Плагины, сначала запустите плагины, затем запустите пресеты и выполните их последовательно.

ignore : файлы для игнорирования

уменьшите: уменьшите код

: common : нужны ли комментарии

env : установить разные среды, применить разные конфигурации, значение конфигурации: BABEL_ENV, если значение NODE_ENV не используется, по умолчанию используется разработка.

Остальные можно посмотреть на официальном сайте...

 

 

 

Общие пресеты

env : предустановлено для замены es2015/es2016/es2017. Внедряйте плагины в соответствии со средой

реагировать : коллекция плагинов для реагирования

реакция-оптимизация: оптимизация кода реакции, например, удаление propsType для сокращения производства вышеуказанного кода.

stage-x : Коллекция надстроек кода плагинов.

поток : коллекция плагинов потока

minify : набор оптимизаций кода

typescript : коллекция плагинов для машинописи

 

 

Общие плагины

transform-async-to-generator : плагин async/await для асинхронных функций

transform-decorators-legacy : Плагин декоратора

синтаксис-динамический-импорт: импорт () плагин

transform-runtime: вспомогательный плагин для ployfill

transform-object-rest-spread : для слияния var test = {a:1,b2};var t = {...test,n:1}

transform-funciton-bind : используется для компиляции obj::fun => fun.bind(obj)

transform-es2015-modules-commonjs: модуль es6 используется в узле

woo woo woo.cn blog on.com/Пойдем вместе/Боюсь/96… 

мой блог :  XiaoLong's Blog

   Блог Пак заикается: https://www.cnblogs.com/jiebba