Вопрос про babel-preset-env
Всем привет.
Пишу пакет. Столкнулся с кое-каким моментом при компиляции ES6(2015) в ES5 с помощью Babel. Есть такая исходная конструкция: switch(typeof obj) { case 'string': case 'number': ///... break; case 'object': //... break; } Но результат после компиляции получается вот такой: 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; }; switch(typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) { case 'string': case 'number': ///... break; case 'object': //... break; } Я понимаю, что это полифил для Symbol, но как мне указать явно, что там полифилить мне ничего не нужно? Ведь я там явно знаю, что проверок на typeof "symbol" у меня нет, поэтому мне лишние вызовы не нужны. P.S.: знаю, что экономия на спичках, но я перфекционист. |
Цитата:
|
ruslan_mart,
Не использовать env. собрать вручную все плагины кроме Symbol, env это готовая сборка. |
j0hnik, прикол в том, что если я даже указываю в browserList последние две версии хрома, то один фиг делает эту обёртку над typeof. Причём основного полифила для Symbol нет. И это не только в env, тоже самое происходит и в babel-preset-es2015.
|
ruslan_mart,
Цитата:
Можно вынести этот кусок кода в отдельный файл и вебпаком сделать exclude этого файла из-под Babel. |
ruslan_mart,
сделал такой .babelrc { "presets": [ ["env", { "exclude": ["transform-es2015-typeof-symbol"] }] ] } На выходе получил eval("\n\nswitch (typeof obj) {\n\n case 'string':\n case 'number':\n ///...\n break;\n\n case 'object':\n //...\n break;\n}\n\n//# sourceURL=webpack:///./file.js?"); Вроде то что нужно, проверьте. |
Часовой пояс GMT +3, время: 15:11. |