IE8 и babel
В одном из проектов требуется на уровне ТЗ поддержка 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();
Очень бредово, если честно. Ведь можно было сохранить изначальный код в первозданном виде.