Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.07.2018, 04:22
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Вопрос про 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.: знаю, что экономия на спичках, но я перфекционист.
Ответить с цитированием
  #2 (permalink)  
Старый 16.07.2018, 07:54
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,012

Сообщение от ruslan_mart
знаю, что экономия на спичках, но я перфекционист
Вариантов всего два: либо писать на старом добром, либо использовать Бабель и смириться с кучками говнокода на местах.
Ответить с цитированием
  #3 (permalink)  
Старый 16.07.2018, 08:01
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

ruslan_mart,
Не использовать env. собрать вручную все плагины кроме Symbol, env это готовая сборка.
Ответить с цитированием
  #4 (permalink)  
Старый 16.07.2018, 08:37
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

j0hnik, прикол в том, что если я даже указываю в browserList последние две версии хрома, то один фиг делает эту обёртку над typeof. Причём основного полифила для Symbol нет. И это не только в env, тоже самое происходит и в babel-preset-es2015.
Ответить с цитированием
  #5 (permalink)  
Старый 16.07.2018, 08:58
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

ruslan_mart,
Цитата:
как мне указать явно, что там полифилить мне ничего не нужно?
Как правильно было сказано, никакого полифила нет. Это обычная кастомная проверка typeof. Babel-polyfill внутри себя использует core-js полифилы, и для Symbol пострашнее конструкция будет https://github.com/zloirock/core-js/...s/es.symbol.js
Можно вынести этот кусок кода в отдельный файл и вебпаком сделать exclude этого файла из-под Babel.
Ответить с цитированием
  #6 (permalink)  
Старый 16.07.2018, 09:20
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,207

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?");

Вроде то что нужно, проверьте.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
еще один вопрос про кнопки и события f0rzik Общие вопросы Javascript 15 19.01.2013 23:19
Вопрос про change vitaly63 Общие вопросы Javascript 1 24.12.2012 10:50
Глупый вопрос про if then. Irish.Tippler Общие вопросы Javascript 9 26.07.2012 12:32
Вопрос: И опять про offsetLeft... sigurd Общие вопросы Javascript 11 04.10.2010 14:06
Вопрос про отправку данных методом Post QQQ AJAX и COMET 1 15.07.2009 23:27