Socket.io-client: Не удается загрузить файл в IE

Созданный на 25 сент. 2019  ·  31Комментарии  ·  Источник: socketio/socket.io-client

t.log = function (... e) {
вернуть "объект" == typeof console && console.log && console.log (... e)
}
этот код не выполняется в IE11.
Ожидаемая ошибка идентификатора.

Самый полезный комментарий

Сказать, что транспилировать node_modules вместо публикации пакета, поддерживающего как можно больше активных сред, - это средний палец для любого, кто занимается бизнесом.
Мне нужно тщательно выбирать каждый пакет для транспиляции, поскольку перенос всего из node_modules более чем в четыре раза увеличивает время сборки некоторых проектов - иногда от нескольких минут до часа. На это ни у кого нет времени.
Сегодня больше людей используют IE11, чем Firefox. IE11 по-прежнему поддерживается Microsoft. Я не думаю, что навязывание личных убеждений в том, что сообщество JS движется недостаточно быстро, действительно приносит пользу.

Все 31 Комментарий

То же самое здесь в v2.3.0 и IE 11

То же самое здесь в v2.3.0 и IE 11

Мы вернулись к версии 2.2.0, и она работает нормально.

Я также вернулся к 2.2.0, и он отлично работает. Похоже, что код, экспортированный модулем, недействителен ES5.

Ну, это должно быть передано babel ... Я посмотрю на это.

Le jeu. 26 сен. 2019 в 11:09, orangejuice [email protected] a
écrit:

Я также вернулся к 2.2.0, и он отлично работает.

-
Вы получаете это, потому что подписаны на эту ветку.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/socketio/socket.io-client/issues/1328?email_source=notifications&email_token=ADDNSFI5LWY4MJXY24WZNNLQLR333A5CNFSM4I2MYYBKYY3PNVWWK3TREX63VLVMVWWK3TREXWWG4DVMWWWK3TREXWWG4VMVWWWK3TULXWWG4DVWWK3TREXWWG4VMWWWK3TREXWW4
или отключить поток
https://github.com/notifications/unsubscribe-auth/ADDNSFNC7OUW4Z3BEWLSNRLQLR333ANCNFSM4I2MYYBA
.

Это произошло после обновления отладки с v3 до v4, которая использует оператор распространения в своем распространяемом файле.
Очень часто node_modules исключаются из компиляции babel по соображениям производительности.

Это есть и в IE11.

"SyntaxError: Syntax error
   at ../node_modules/socket.io-client/node_modules/debug/src/browser.js (http://192.168.86.48:3000/static/vendors~vehicle-Vehicle.jsx.eb6d2ebd6bfc7172757c.js:510:1)
   at __webpack_require__ (http://192.168.86.48:3000/static/client.js?1571655164758:107:12)
   at eval code (eval code:7:1)
   at ../node_modules/socket.io-client/lib/url.js (http://192.168.86.48:3000/static/vendors~vehicle-Vehicle.jsx.eb6d2ebd6bfc7172757c.js:488:1)
   at __webpack_require__ (http://192.168.86.48:3000/static/client.js?1571655164758:107:12)
   at eval code (eval code:6:1)
   at ../node_modules/socket.io-client/lib/index.js (http://192.168.86.48:3000/static/vendors~vehicle-Vehicle.jsx.eb6d2ebd6bfc7172757c.js:444:1)
   at __webpack_require__ (http://192.168.86.48:3000/static/client.js?1571655164758:107:12)
   at eval code (eval code:55:22)
   at ./shared/components/catalogue/ValuationCatalogue.jsx (http://192.168.86.48:3000/static/vehicle-Vehicle.jsx.b7e97db41986fa53caa6.js:344:1)"

Затронутые строки

/**
 * Invokes `console.log()` when available.
 * No-op when `console.log` is not a "function".
 *
 * <strong i="9">@api</strong> public
 */
function log(...args) {
    // This hackery is required for IE8/9, where
    // the `console.log` function doesn't have 'apply'
    return typeof console === 'object' &&
        console.log &&
        console.log(...args);
}

На самом деле нечего добавить, поскольку он был идентифицирован как непереносимый код.

То же самое здесь в v2.3.0 и IE 11

и iOS9 Safari

Это критическое изменение в точечном выпуске, который мы тоже обновили автоматически. Для тех, кто все еще поддерживает IE11, это довольно серьезно, нам потребовалось несколько дней, чтобы понять.

Сколько времени вы ожидаете от них, чтобы исправить проблему?

эта проблема связана с debug:4.1.0 Они уже заменили метод, но пока нет новой сборки, в которой эта проблема исправлена.

Исправление для socket.io-client и engine.io-client заключается в замене текущей версии debug на версию 4.0.1 .

К сожалению, похоже, что разработчик debug вообще не желает слышать о нашей проблеме: https://github.com/visionmedia/debug/issues/668#issuecomment -576262641

Привет @darrachequesne :)

Не могли бы вы закрепить пакет debug для socket.io-client на 4.0.1 ? Спасибо!

Тем временем я попытался связаться с сопровождающим debug и попросил его пересмотреть свой выбор больше не переносить пакет в код ES5 : https://github.com/ Visionmedia / отладка / проблемы / 745

Я слышал эту проблему тысячу раз. Я слышал это с тех пор, как проблема была впервые создана. Пожалуйста, перекомпилируйте свое приложение, если вы хотите, чтобы оно работало в устаревших браузерах; debug - это лишь первая из многих зависимостей, с которыми вы столкнетесь, которые написаны и опубликованы как модули ES6.

Очень часто node_modules исключаются из компиляции babel по соображениям производительности.

Это не означает, что разработчики пакетов должны придерживаться своего кода в каменном веке. Экосистема javascript медленная, да, но еще медленнее, когда, например, IE11 сдерживает нас. Причина, по которой debug выбирается очень часто, заключается в том, что он входит в топ-10 наиболее зависимых от пакетов и, таким образом, обычно является одним из первых пакетов, в которых возникают ошибки или проблемы, даже если сотни других зависимостей замедлят вас. вниз тоже.

Если вы мне не верите, вручную перенесите debug в node_modules и попробуйте снова связать свое приложение. Скорее всего, в зависимости от размера вашего приложения процесс связывания не удастся где-то еще.

Если у вас есть проблемы с эффективностью Babel, откройте вопрос в Babel. Если у вас есть проблема с CRA, не выполняющим надлежащую транспиляцию, откройте проблему с CRA.

Я не хочу показаться пренебрежительным; это просто не проблема debug .

Из того, что они говорят в этой ссылке здесь . Кажется, это проблема конфигурации babel, возможно, если персонал изменит конфигурацию внутри socket-io-client, это может решить проблему.

Верный; это официальный ответ команды Babel. Пожалуйста, отнесите свои проблемы туда.

Какой официальный ответ? Связанная проблема заключалась в том, что babel не транслировал выбранные пакеты из node_modules при настройке, и это исправлено.

Socket.io-client даже не использует babel для транспиляции. Он использует только webpack для объединения всех зависимостей в один распространяемый файл.

Итак, теперь, если socket.io-client будет поддерживаться в старых браузерах, ему потребуется либо этап транспиляции при сборке, либо необходимо понизить версию или заменить отладку.

Публикация пакетов для Интернета, требующих транспиляции, на самом деле не так уж и распространена. За годы транспиляции я встречал это всего несколько раз даже в проектах с буквально гигабайтами зависимостей в node_modules. До сих пор каждый сопровождающий относился к этому как к ошибке ...

Это ответ, о котором я имел в виду:

Я согласен с тем, что это не ошибка debug , а проблема с настройкой Babel.

Если вы настроили Babel для транспиляции узловых модулей, но он все еще не работает, предоставьте минимальный репозиторий, который я могу клонировать для исследования.


Итак, теперь, если socket.io-client будет поддерживаться в старых браузерах, это необходимо. . . шаг транспиляции

Верный. Таково состояние современной веб-разработки.

буквально с гигабайтами зависимостей в node_modules

Это настоящая проблема. Не debug выбирающий не транспилировать. При использовании модулей ES6 это обычно не проблема, потому что ваше приложение будет связывать только те зависимости, которые оно использует, и, таким образом, будет переносить только те зависимости, которые оно использует. Люди делают это каждый день с большим эффектом.

До сих пор каждый сопровождающий относился к этому как к ошибке ...

Использование совершенно корректных версий Javascript не является ошибкой.

Сказать, что транспилировать node_modules вместо публикации пакета, поддерживающего как можно больше активных сред, - это средний палец для любого, кто занимается бизнесом.
Мне нужно тщательно выбирать каждый пакет для транспиляции, поскольку перенос всего из node_modules более чем в четыре раза увеличивает время сборки некоторых проектов - иногда от нескольких минут до часа. На это ни у кого нет времени.
Сегодня больше людей используют IE11, чем Firefox. IE11 по-прежнему поддерживается Microsoft. Я не думаю, что навязывание личных убеждений в том, что сообщество JS движется недостаточно быстро, действительно приносит пользу.

Сказать, что транспилировать node_modules вместо публикации пакета, поддерживающего как можно больше активных сред, - это средний палец для любого, кто занимается бизнесом.

На самом деле это не конструктивная позиция, и я лично не хотел бы вести беседу с открытым исходным кодом.

Думаю, я сказал здесь свою часть. Извините, что мое решение улучшить ремонтопригодность модуля, загружаемого почти 60 миллионов раз в неделю, не соответствует вашей бизнес-модели.

Сегодня больше людей используют IE11, чем Firefox. IE11 по-прежнему поддерживается Microsoft. Я не думаю, что навязывание личных убеждений в том, что сообщество JS движется недостаточно быстро, действительно приносит пользу.

проблема в этом случае больше, чем в компаниях, использующих ie11, после того, как мои логи заходят 25% моих посетителей, т.е.

Я бы хотел показать средний палец, то есть, но когда вы ведете бизнес, вы не можете отправить их в ад, потому что вам нужны деньги :)

Каков текущий способ решения этой проблемы?

Каков текущий способ решения этой проблемы?

2.2.0 когда вы можете после fmoessle

Мне потребовалось 3 дня, чтобы узнать, что ошибка исходит от модуля socket.io-client lol

Я тоже понижаю версию модуля до 2.2.0 ура всем

У меня тоже сработало понижение до 2.2.0. Спасибо.

Возможно, хорошее решение - переключить socket.io на эту вилку debug debug-es5, которая переносится на es5.

Я потратил целый день, пытаясь заставить babel и webpack переносить debug / src / browser.js, и из многих потоков, на которые я наткнулся, похоже, что многие люди тоже сталкиваются с этим. Похоже, можно сэкономить много инженерного времени.

Кстати, в socket.io v2.2.0 есть утечка памяти, которая была исправлена ​​в ws v7.1.2 (https://github.com/websockets/ws/issues/1617), поэтому будьте осторожны при переходе на более раннюю версию.

Изменить: исправлено
Большинство сообщений, которые я нашел, рекомендовали прекратить исключение / node_modules / из веб-пакета, но это не сработало и также работает медленно. (почти уверен, что webpack попал в файл, но babel его не транспилировал, возможно, связано с babel / preset-env)

Вместо этого я просто установил debug-es5 и попросил webpack использовать его вместо debug , добавив его в webpack.config.js

  resolve: {
    alias: {
      debug: 'debug-es5',
    },
  },

Я использую:

{
  test: /\.js$/,
  use: babelLoader,
  exclude: excludeNodeModulesExcept(['debug']),
},
const babelLoader = {
    loader: 'babel-loader',
    options: {
      // Don't waste time on Gzipping the cache
      cacheCompression: false,
      // This is a feature of `babel-loader` for webpack (not Babel itself).
      // It enables caching results in ./node_modules/.cache/babel-loader/
      // directory for faster rebuilds.
      cacheDirectory: true,
      plugins: ['@babel/plugin-syntax-dynamic-import'],
      presets: [['@babel/env', { modules: false }]],
      sourceMaps: includeSourcemap && !isDevelopmentMode,
    },
  };



md5-af1f69980cb7fa352eba1d2f79ce2612



const excludeNodeModulesExcept = function (modules) {
  var pathSep = path.sep;
  if (pathSep == '\\')
    // must be quoted for use in a regexp:
    pathSep = '\\\\';
  var moduleRegExps = modules.map(function (modName) {
    return new RegExp('node_modules' + pathSep + modName);
  });

  return function (modulePath) {
    if (/node_modules/.test(modulePath)) {
      for (var i = 0; i < moduleRegExps.length; i++)
        if (moduleRegExps[i].test(modulePath)) return false;
      return true;
    }
    return false;
  };
};

изменение socket.io-client на 2.2.0 у меня работает, но только после сборки и запуска приложения.

в режиме разработки я все еще получаю сообщение об ошибке

TypeError: объект не поддерживает свойство или метод cbrt
{
[функции]:,
__proto__: {},
описание: «Объект не поддерживает свойство или метод 'cbrt'»,
сообщение: «Объект не поддерживает свойство или метод 'cbrt'»,
имя: "TypeError",
номер: -2146827850,
stack: "TypeError: объект не поддерживает свойство или метод cbrt"
в cielabForwardTransform (код оценки: 39754: 3)
at fromXYZ (код оценки: 39763: 3)
при освещении (код оценки: 39706: 3)
в genVariations (код оценки: 39696: 5)
при синтаксическом анализе (код оценки: 39606: 7)
в parsedTheme.get (код оценки: 39498: 7)
в createdStyles.get (код оценки: 39466: 7)
в Theme.prototype.applyTheme (код оценки: 39297: 5)
в обработчике (код оценки: 39449: 13)
в Vue.prototype. $ watch (код оценки: 4941: 9) ",
Символ (резервный вариант Lang) _i.t81c9tw05xo: undefined,
Символ (react.element) _h.t81c9tw05xo: undefined,
Символ (стоп) _n.t81c9tw05xo: undefined
}

Возможно, хорошее решение - переключить socket.io на эту вилку debug debug-es5, которая переносится на es5.

Я потратил целый день, пытаясь заставить babel и webpack переносить debug / src / browser.js, и из многих потоков, на которые я наткнулся, похоже, что многие люди тоже сталкиваются с этим. Похоже, можно сэкономить много инженерного времени.

Кстати, в socket.io v2.2.0 есть утечка памяти, которая была исправлена ​​в 'ws' v7.1.2 ( websockets / ws # 1617 ), поэтому будьте осторожны при переходе на более

Изменить: исправлено
Большинство сообщений, которые я нашел, рекомендовали прекратить исключение / node_modules / из веб-пакета, но это не сработало и также работает медленно. (почти уверен, что webpack попал в файл, но babel его не транспилировал, возможно, связано с babel / preset-env)

Вместо этого я просто установил debug-es5 и попросил webpack использовать его вместо debug , добавив его в webpack.config.js

  resolve: {
    alias: {
      debug: 'debug-es5',
    },
  },

Это сэкономило мне часы работы - спасибо!

Я создал очень маленькое репо с этой проблемой, решенной с помощью базовой конфигурации Webpack: https://github.com/kmaraz/debug-to-es5

Зависимость debug была возвращена к 3.1.0 , которую не нужно переносить. Выпущено в версии 2.3.1 .

Обратите внимание, что вы также можете использовать плагин webpack-remove-debug , чтобы удалить любой вызов зависимости отладки (пока мы не найдем правильный способ предоставить сборку с отладкой и без нее).

Была ли эта страница полезной?
0 / 5 - 0 рейтинги