Spec-Zone.ru › Babel 7

Что такое Babel?

Babel — это компилятор JavaScript​

Babel — это инструмент, который в основном используется для преобразования кода ECMAScript 2015+ в обратно совместимую версию JavaScript для современных и устаревших браузеров или сред. Вот основные возможности Babel:

  • Преобразование синтаксиса
  • Полифиллинг функций, отсутствующих в вашей целевой среде (через сторонний полифилл, такой как core-js)
  • Преобразования исходного кода (codemods)
  • И многое другое! (посмотрите эти видео для вдохновения)
// Babel Input: ES2015 arrow function
[1, 2, 3].map(n => n + 1);

// Babel Output: ES5 equivalent
[1, 2, 3].map(function(n) {
  return n + 1;
});

Для замечательного учебника по компиляторам, ознакомьтесь с the-super-tiny-compiler, который также объясняет, как работает сам Babel на высоком уровне.

ES2015 и новее​

Babel поддерживает последнюю версию JavaScript с помощью синтаксических преобразователей.

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

JSX и React​

Babel может преобразовывать синтаксис JSX! Ознакомьтесь с нашим пресетом для React, чтобы начать работу. Используйте его вместе с пакетом babel-sublime, чтобы повысить уровень синтаксического выделения.

Вы можете установить этот пресет с помощью

  • npm
  • Yarn
  • pnpm
npm install --save-dev @babel/preset-react
yarn add --dev @babel/preset-react
pnpm add --save-dev @babel/preset-react

и добавьте @babel/preset-react в вашу конфигурацию Babel.

export default function DiceRoll(){
  const getRandomNumber = () => {
    return Math.ceil(Math.random() * 6);
  };

  const [num, setNum] = useState(getRandomNumber());

  const handleClick = () => {
    const newNum = getRandomNumber();
    setNum(newNum);
  };

  return (
    <div>
      Your dice roll: {num}.
      <button onClick={handleClick}>Click to get a new number</button>
    </div>
  );
};

Узнайте больше о JSX

Аннотации типов (Flow и TypeScript)​

Babel может удалить аннотации типов! Ознакомьтесь с нашим пресетом Flow или пресетом TypeScript, чтобы начать работу. Имейте в виду, что Babel не выполняет проверку типов; вам по-прежнему нужно установить и использовать Flow или TypeScript для проверки типов.

Вы можете установить пресет Flow с помощью

  • npm
  • Yarn
  • pnpm
npm install --save-dev @babel/preset-flow
yarn add --dev @babel/preset-flow
pnpm add --save-dev @babel/preset-flow
// @flow
function square(n: number): number {
  return n * n;
}

или пресет TypeScript с помощью

  • npm
  • Yarn
  • pnpm
npm install --save-dev @babel/preset-typescript
yarn add --dev @babel/preset-typescript
pnpm add --save-dev @babel/preset-typescript
function Greeter(greeting: string) {
  this.greeting = greeting;
}

Узнайте больше о Flow и TypeScript

Подключаемые модули​

Babel построен из плагинов. Создайте собственную цепочку преобразований, используя существующие плагины или создавая свои собственные. Легко используйте набор плагинов, используя или создавая пресет. Узнать больше →

Создайте плагин на лету с помощью astexplorer.net или используйте generator-babel-plugin для генерации шаблона плагина.

// A plugin is just a function
export default function({ types: t }) {
  return {
    visitor: {
      Identifier(path) {
        let name = path.node.name; // reverse the name: JavaScript -> tpircSavaJ
        path.node.name = [...name]
          .reverse()
          .join("");
      },
    },
  };
}

Отлаживаемый​

Поддержка карты исходного кода, чтобы вы могли легко отладить скомпилированный код.

Соответствующий спецификации​

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

Компактный​

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

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

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

Spec-Zone.ru

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