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

Современные браузеры поддерживают большинство этих синтаксических улучшений, однако для поддержки устаревших браузеров приходится использовать Babel. Хотя бывают ситуации, когда можно не волноваться о поддержке старых браузеров и начать жить.
Это может быть какой-то внутренний проект или же просто серверный JS-код. Напомню, что последняя стабильная версия NodeJS поддерживает ES6 на 99%. В таких случаях можно смело писать весь код на ES6.

Хорошо, но как быть с легаси? Для таких случаев на помощь приходит Lebab. Это программа, которая трансформирует JavaScript-код с традиционным синтаксисом в новый блестящий синтаксис ES6. Установить ее можно через npm:

npm install -g lebab

Можно преобразовать один файл или список файлов из папки:

$ lebab main.js -o main-es6.js --transform arrow
$ lebab --replace 'src/js/**/*.jsx' --transform arrow

Попробуем в деле:



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

import lebab from 'lebab';
const {code, warnings} = lebab.transform('var f = function(){};', ['let', 'arrow']);
console.log(code); // -> "const f = () => {};"

Список доступных преобразований и их надежность описана в документации.

Решитесь ли вы протестировать Lebab на собственном проекте?
Поделиться с друзьями
-->

Комментарии (15)


  1. DexterHD
    10.01.2017 11:34

    Разве node.js поддерживает импорты и экспорты в ES6 стиле? Или я что-то пропустил?


    1. k12th
      10.01.2017 12:17
      +2

      Пока нет, там несколько неясных моментов. Но если запускать через babel-node (что нормально для одноразовых скриптов), то будет работать.


      1. eko24
        10.01.2017 12:23

        Если я правильно понимаю то можно с таким же успехом использовать Webpack, верно ?


        1. k12th
          10.01.2017 12:33
          +3

          Я не очень понимаю, при чем тут Webpack. Webpack !== babel, хотя они и используются часто вместе, но это не единственный вариант использования их обоих.


          babel-node утилита командной строки, которая эмулирует поведение nodejs, только перед исполнением файла она его транспилирует и только потом передает настоящему nodejs.


          1. Dreyk
            10.01.2017 17:22
            -2

            смотря что за проект. если это frontend, то скорее всего там webpack. а он сам умеет разруливать модули. на своем pet-project я вообще убрал babel, потому что node может 99%, а webpack — остальной 1%


            1. k12th
              10.01.2017 17:24
              +2

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


  1. raveclassic
    10.01.2017 12:41
    +3

    Удобно, конечно, но зачем ворошить легаси? В чуть более чем 146% случаев это кончится плохо.


    1. igorch96
      10.01.2017 13:46

      Особенно, когда это легаси проверено временем и отлично работает…


    1. nixel
      10.01.2017 15:40
      +3

      Всегда остаётся вопрос поддерживаемости кода. Когда вся новая кодовая база написана на новой версии языка, возвращение к старым версиям может быть затруднительным — начиная от "как, тогда нельзя было писать вот так", до "что вообще тут написано".
      Можно воспринимать это как своеобразный рефакторинг и освежение в памяти внутренностей легаси-кода


      1. raveclassic
        10.01.2017 15:43
        +1

        Можно воспринимать это как своеобразный рефакторинг и освежение в памяти внутренностей легаси-кода
        Так каким же образом автоматизированный перевод вам все это даст? ;)


        1. nixel
          10.01.2017 17:52
          +4

          Вы же не будете коммитить автосгенеренный код в гит без тестов (в худшем случае с легаси их еще и написать надо) и пробега глазами? ;)


  1. Iskin
    11.01.2017 08:25

    Интересно, что это проект из Ирана — я встречался с его автором, милый парень.


  1. Ledzz
    12.01.2017 15:48

    Вот бы еще кто-нибудь запилил cst, чтобы в typescript код превращать.


    1. nixel
      15.01.2017 02:26

      Не уверен насчёт typescript 2.0, но в 1.8 один свой небольшой проект на ts я перевел банальным переименованием расширения файла, т.е. голый js работал как typescript без каких-то проблем. Разве сейчас не так?
      Или вы хотите, чтобы он вам сразу типы переменных и возвращаемых значений прописал?


      1. Ledzz
        15.01.2017 16:02

        Да, хочу:)