В одном из проектов требуется на уровне ТЗ поддержка Internet Explorer 8
. Спасибо, что не 7 :) Дошли руки до перевода кодовой базы на es6
. Воткнул как обычно preset es2015
, потестил, вроде всё работает, но дёрнул меня чёрт проверить и в старом ослике. Подохло там всё. Причём глюк настолько странный, что я невольно задвигал бровями. Перейду сразу к сути:
function init(){ console.log(1); } var a = { init: function(){ console.log(2); } }; init();
Результат, конечно же, 1. Однако babel
превратит сий код в:
"use strict"; function init() { console.log(1); } var a = { init: function init() { console.log(2); } }; init();
Ключевое отличие ― именование метода. Теперь он тоже init
. Зачем? Не ко мне вопрос. Может быть для упрощения отладки. Но с этого момента старый ишак возвращает 2. Оказывается это старый баг тогдашнего jscript
-а.
Лечение: добавляем: plugins: [“transform-jscript”]
к настройкам babel
-я. Ну и соответственно тащим этот плагин. С этого момента babel
будет генерировать вот таких вот монстров:
"use strict"; function init() { console.log(1); } var a = { init: function() { function init(){ console.log(2); } init(); } }; init();
Очень бредово, если честно. Ведь можно было сохранить изначальный код в первозданном виде.