Помешать транспортировке вавилона за одну линию - PullRequest
0 голосов
/ 08 сентября 2018

Транспортер Babel - очень полезный инструмент для запуска кода, написанного в современном синтаксисе JavaScript, для запуска в старых браузерах. Однако мне нужно работать вокруг it, а не с it.

У меня есть две очень разные версии одной и той же библиотеки (CkEditor4 и CkEditor5, на случай, если это имеет значение). CkEditor5 не работает в IE11, даже с Babel и polyfilling. CkEditor4 полон встроенных обработчиков, поэтому мы должны отключить наш CSP на тех страницах, на которых он включен.

Очевидно, что решение здесь заключается в использовании разделения кода - загрузите 5 в браузерах, которые его поддерживают, и 4 в браузерах, которые его не поддерживают. Я хочу использовать функцию «Обнаружение функций», а не «Обнаружение браузера», поскольку существует больше браузеров, чем IE11, которые не могут работать с 5, и некоторые из них действительно посещают наш сайт.

Однако, когда я добавляю свою строку обнаружения функции в базу кода:

const supports = typeof Symbol === "function" && typeof Symbol() === "symbol";
console.log(supports);

Бабель переносит это на:

"use strict";

var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };

var supports = typeof Symbol === "function" && _typeof(Symbol()) === "symbol";
console.log(supports);

Возвращает значение true, если символ заполнен , а также когда он изначально поддерживается. Поэтому IE11 загружает CkEditor5, который не работает.

Кажется, что нет способа найти функцию Определить ключевое слово const без eval (что также запрещает наш CSP), и наш процесс связывания запускает всех файлов в нем через Babel.

Я пробовал:

const s = "Symbol";
const supports = typeof self[s] === "function" && typeof self[s]() === s;

И аналогичные методы омрачения, но Вавилон продолжает видеть сквозь них. Могу ли я заставить его оставить одну эту строку в покое?

...