Javascript-форум (https://javascript.ru/forum/)
-   Оффтопик (https://javascript.ru/forum/offtopic/)
-   -   Безболезненный переход с обычного AMD на Babel + AMD? (https://javascript.ru/forum/offtopic/53878-bezboleznennyjj-perekhod-s-obychnogo-amd-na-babel-amd.html)

FINoM 22.02.2015 16:42

Безболезненный переход с обычного AMD на Babel + AMD?
 
Решил перевести большой проект на ES6, используя babel + AMD для модулей. Проект состоит из сотен файлов, которые затем собираются с помощью r.js и других инструментов в один цельный HTML. Поэтому я решил делать переход постепенно.

Проблема в том, что Бабел полностью ломает текущий код, заставляя менять всё сразу.

1. Добавляет вызов define. Такой код:
define(["x", "y"], function() { ... });

Превращается в такой:
define(["exports"], function (exports) {
  define(["x", "y"], function() { ... });
});

Кто знаком с AMD знает, что этот код не работает.

2. Скрипты сейчас запрашивают HTML темплейты с помощью requirejs плагина text. Как избежать лапши в коде и, в то же время, позволить r.js собирать проект (т. е. инлайнить HTML в JS для продакшна)?

nerv_ 22.02.2015 17:55

Цитата:

Сообщение от FINoM
Проблема в том, что Бабел полностью ломает текущий код, заставляя менять всё сразу

С Бабелем можно использовать различные системы сборки.
Отчасти твой вопрос уже обсуждался здесь.
В данный момент я остановился на webpack. Кстати, сегодня залил пример использования babel+webpack на гитхаб.

nerv_ 22.02.2015 18:04

Чуть больше месяца юзаю es6 - полет не просто нормальный, офигенный! :)
Как сказал kobezzza: "es5 забыть как страшный сон")))

FINoM 22.02.2015 18:36

Пока что я решил просто копировать .js файлы, a ES6 хранить в .es файлах. Вопрос актуален только для запроса HTML (и других не-js файлов). Если менять систему сборки, прийдется перелопатить весь проект.

nerv_ 22.02.2015 21:45

Цитата:

Сообщение от FINoM
Если менять систему сборки, прийдется перелопатить весь проект

А это
Цитата:

Сообщение от FINoM
Решил перевести большой проект на ES6

не одно и тоже?

Цитата:

Сообщение от FINoM
т. е. инлайнить HTML в JS для продакшна

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

Цитата:

Сообщение от FINoM
a ES6 хранить в .es файлах

изначально я думал об этом же. Только с расширением .es6

FINoM 22.02.2015 21:51

Цитата:

Сообщение от nerv_
не одно и тоже?

Не одно и то же. Я пытаюсь сохранить совместимость со старым кодом.

melky 22.02.2015 22:26

Цитата:

Сообщение от nerv_ (Сообщение 357794)
Чуть больше месяца юзаю es6 - полет не просто нормальный, офигенный! :)
Как сказал kobezzza: "es5 забыть как страшный сон")))

аналогично. хорошо, что эти парни сделали распознавание JSX. цены им нет за это :)

FinoM, не пробовал собирать проект через webpack?

Gozar 22.02.2015 22:35

Решил перейти с 6to5 на babel и проект пересал собираться. :(

Настроил как тут сказано https://babeljs.io/docs/using-babel/#webpack и все равно выпадает. Кто-то сталкивался с подобным?

Они там что-то поменяли, после появления вот этого obj && obj.__esModule: return obj ? obj["default"] : obj;

melky 22.02.2015 22:41

Цитата:

Сообщение от Gozar (Сообщение 357829)
Решил перейти с 6to5 на babel и проект пересал собираться. :(

Настроил как тут сказано https://babeljs.io/docs/using-babel/#webpack и все равно выпадает. Кто-то сталкивался с подобным?

Они там что-то поменяли, после появления вот этого obj && obj.__esModule: return obj ? obj["default"] : obj;

да, это модули ES6. тоже спотыкнулся на этом
нужно делать импорт и экспорт в одном стиле - т.е. либо ES6, либо CJS

nerv_ 22.02.2015 22:49

Заинлайнил html :)

melky, слушай, у меня вопрос. Можно ли сделать так, чтобы во время сборки вместо текстовой переменной подставлялось читалось и подставлялось имя текущего файла (без расширения)?
Сейчас приходится руками писать, не очень удобно https://yadi.sk/i/NMa01ZeteqKf8

Цитата:

Сообщение от Gozar
Решил перейти с 6to5 на babel и проект пересал собираться

Цитата:

Сообщение от melky
да, это модули ES6. тоже спотыкнулся на этом
нужно делать импорт и экспорт в одном стиле - т.е. либо ES6, либо CJS

я как знал))) Пишу все в es6 стиле =)


Часовой пояс GMT +3, время: 19:44.