Примечание . Для вопросов поддержки используйте один из следующих каналов: stackoverflow или slack .
- [x] report a *bug*
- [ ] request a *feature*
socket.io-client не работает с @angular/ cli @1.5.0-rc.3 из-за зависимости от node.js' global
var
(кажется, взято из [email protected]
, но я не могу найти, кто поддерживает эти версии)
см. https://github.com/angular/angular-cli/issues/8160
2.0.4
Также сталкиваюсь с этой проблемой в настоящее время
Поскольку https://github.com/angular/angular-cli/issues/8160 теперь решен, можем ли мы закрыть эту проблему? Спасибо!
Я так не думаю, потому что в angular/cli > 6 они навсегда удалили global.
Не могли бы вы начать изучать это снова? https://github.com/angular/angular-cli/issues/9827
БР,
Кевин
Обходной путь, пока Angular CLI не исправит его или не позволит переопределить команду node, тогда вы можете добавить тонкий файл socket.io-client в раздел путей tsconfig.app.json
"paths": {
....
"socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}
Даже если в настоящее время это работает, согласно https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814, это будет проблемой в Angular@6
:
«[это] обычно приводит к ситуации, когда код браузера, который вообще не должен работать, работает только тогда, когда он встроен с очень специфическими инструментами. Это не очень хорошая ситуация».
Я подтверждаю, что он не работает в Angular 6 RC5. Кто-нибудь знает обходной путь?
@ngervasi мы сделали это, как я прокомментировал здесь: https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639
Я старался:
{
"extends": "../tsconfig.json",
"compilerOptions": {
"outDir": "../out-tsc/app",
"module": "es2015",
"baseUrl": "",
"types": []
},
"exclude": [
"test.ts",
"**/*.spec.ts"
],
"paths": {
"socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}
}
но это не работает в Angular 6RC5, я все еще получаю сообщение об ошибке:
is-buffer.js:4 Uncaught ReferenceError: global is not defined
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/is-buffer.js (is-buffer.js:4)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/binary.js (binary.js:8)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/node_modules/socket.io-parser/index.js (index.js:8)
at __webpack_require__ (bootstrap:74)
at Object../node_modules/socket.io-client/lib/index.js (index.js:7)
at __webpack_require__ (bootstrap:74)
at Object../src/app/_services/websocket.service.ts (log.service.ts:5)
at __webpack_require__ (bootstrap:74)
Согласно https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:
добавление следующего polyfills.ts
должно работать в Angular@6
:
// Add global to window, assigning the value of window itself.
(window as any).global = window;
В любом случае, эта проблема не должна быть решена IMO, socket.io-client должен либо удалить неявную зависимость от global
, либо задокументировать необходимость полифилла (любым, использующим предварительно собранные источники, а не только Угловые пользователи)
(Кстати, где источники последних [email protected]
? Может быть, я мог бы помочь)
Что лучше исправить? https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (добавление путей в tsconfig) или https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (назначение глобальному)?
Оба варианта работали для меня в проекте Angular v6, созданном с помощью Angular CLI.
@amitport исходники пакета has-binary2
находятся здесь: https://github.com/darrachequesne/has-binary
Хотя, боюсь, это не единственный случай.
@darrenmothersele не думаю, что есть что-то одно «лучше». Добавление «глобального» может иметь побочные эффекты для других библиотек, в то время как добавление «тонкого» файла может отрицательно сказаться на размере пакета (не обязательно).
@darrachequesne добавил PR https://github.com/darrachequesne/has-binary/pull/4 (это начало :))
Я пробовал оба решения и с текущим проектом angular 6.0.0, и ни одно из них не работает. Я добавил запись путей в tsconfig.app.json и запись в polyfills.ts, но все равно получаю ту же ошибку в chrome.
то же самое здесь, решение tsconfig не работает на ng cli 6
// Добавляем глобал к окну, присваивая значение самому окну.
(окно как любое).global = window;
работает на меня
Спасибо.
У меня тоже работает! Спасибо!
Это работает и для меня! Большое спасибо ! :D
куда ты положил (window as any).global = window;
?
Спасибо.
Привет,
Вон там (на картинке).
2018-05-17 21:07 GMT+02:00 Альберто Басалья, уведомления@github.com :
куда вы поставили (окно как любое).global = window; ?
Спасибо.—
Вы получаете это, потому что вы прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.
--
Арно Тюсси-Васильев
Веб-разработка с полным стеком на веб-сайтах Leaf
Веб-сайт: www.leaf-website.esy.es http://www.leaf-website.esy.es
Почта: a.tussy.
Тел : 07 77 83 29 44
куда ты положил...
Положите это в свой polyfills.ts
(window as any).global = window
между строками 63 и 70
2018-05-31 18:31 GMT+02:00 Бибхас Бхаттачарья уведомления@github.com :
куда ты положил...
Поместите это в свой polyfills.ts
(окно как любое).global = окно
—
Вы получаете это, потому что вы прокомментировали.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.
--
Арно Тюсси-Васильев
Веб-разработка с полным стеком на веб-сайтах Leaf
Веб-сайт: www.leaf-website.esy.es http://www.leaf-website.esy.es
Почта: a.tussy.
Тел : 07 77 83 29 44
@amitport спасибо, обходной путь, который вы предоставили, работает!! @AngularTeam , почему вы продолжаете ломать все, ребята: / вам даже удалось привлечь своих людей в команду rxjs, и вдруг даже rxjs ломает все теперь при изменении версии ... не отставал от angular с момента первого стабильного выпуска, и я поражен вашим возможность сломать все на каждом выпуске.
@LucasFrecia это проблема socket.io, а не Angular. Angular поступил правильно, перестав скрывать его в версии 6 (которая помечена как основной релиз).
Две недели назад добавлен еще один запрос на извлечение https://github.com/webmodules/blob/pull/14 для https://github.com/webmodules/blob (используется engine.io-parser).
Он не получает никакого ответа, кто-нибудь здесь может его объединить? @darrachequesne @rauchg @nkzawa?
Добавление (окно как любое).global = window; чтобы polyfills.ts работал у меня
@amitport спасибо .
Он отлично работает
Я поместил (window as any).global = window в файл polyfills.ts.
Он не дает ReferenceError: global is not defined
на локальном хосте, но выдает эту ошибку, если я пытаюсь запустить производственную сборку с http-сервером для целей тестирования.
Любая подсказка, почему это происходит?
Это супер срочно!
Привет @gupta82anish ,
Я поместил (window as any).global = window;
в файл pollyfills.ts
и запустил проект на локальном хосте (разработка), а также собрал его для производства и не получил никаких ошибок.
Это сработало как шарм.
Обходной путь (window as any).global = window;
в pollyfills.ts
, кажется, работает для меня в угловом ядре 6.1.0. Будем надеяться, что socket.io скоро обновится.
(окно как любое).global = window; в pollyfills.ts у меня тоже сработало!!
(window as any).global = window;
Это очень аккуратное решение. Но правильно ли это?
@avinexus7 это неправильный подход. Это обходной путь для открытой проблемы в socket.io-client
: использование «глобального» объекта, которого нет в браузерах.
(насколько мне известно, никто не пытается решить эту проблему, см. игнорируемые: https://github.com/socketio/engine.io-parser/issues/99 и https://github.com/webmodules/blob/pull /14)
@amitport , не могли бы вы связаться со службой поддержки NPM, чтобы они предоставили вам права на публикацию новой версии пакета blob
?
@darrachequesne - готово, я отправил запрос в NPM
(window as any).global = window
или
(window as any) = window
добавьте приведенный выше код в файл polyfills.ts
.
Согласно angular/angular-cli#8160 (комментарий) :
добавление следующего
polyfills.ts
должно работать вAngular@6
:// Add global to window, assigning the value of window itself. (window as any).global = window;
В любом случае, эта проблема не должна быть решена IMO, socket.io-client должен либо удалить неявную зависимость от
global
, либо задокументировать необходимость полифилла (любым, использующим предварительно собранные источники, а не только Угловые пользователи)(Кстати, где источники последних
[email protected]
? Может быть, я мог бы помочь)
Да, это сработало и для меня. Спасибо.
куда ты положил...
Положите это в свой
polyfills.ts
(window as any).global = window
@bibhas2 Отлично! работал на меня
возможно исправлено теперь, когда выпущен https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 (может потребоваться переустановка socket.io-client без блокировки пакета)
не работает с
├─ двигатель. io-клиент@3.3.1
└─ розетка. io-клиент@2.2.0
@kartikupadhyay90 , можешь добавить подробности?
после обновления до 2.2.0
в моем приложении ReactNative мой экземпляр socket.io не получает уведомление с сервера. Пришлось перейти на 2.1.1
@alimek вы уверены, что ваша ошибка связана с этой проблемой? пожалуйста, добавьте подробности. В противном случае, пожалуйста, опубликуйте новую проблему
@amitport , если это единственное изменение между предыдущей версией и 2.2.0, то я так думаю
@alimek перефразирует: если ваша ошибка _такая же_, как эта, добавьте подробности. В противном случае, пожалуйста, откройте новую проблему (которая может быть регрессией).
(Кстати, я не сопровождаю эту библиотеку, я просто комментирую, как работает обработка проблем в целом. Если вы хотите, чтобы ваша проблема была решена, вам нужно добавить действенные сведения и опубликовать ее соответствующим образом)
В моей ситуации кажется, что 2.2.0 зависит от "engine.io-client": "~3.3.1", который зависит от "engine.io-parser": "~2.1.1". Однако engine.io-parser в моей системе, похоже, 2.1.2, который все еще содержит ссылки на глобальную переменную. Кажется, это было исправлено в 2.1.3, но npm i, похоже, тянет 2.1.2.
Если бы мне пришлось сделать предположение, возможно, он вернулся бы к 2.1.2, потому что последняя сборка для 2.1.3 не удалась.
https://travis-ci.org/socketio/engine.io-parser
Кроме того, я не могу понять, почему он продолжает тянуть старую версию для меня.
У меня такая же проблема с Jest + React + Typescript, и я не мог исправить ее, установив (window as any).global = window
. Я также попытался поместить код в файл polyfills.ts
,
setupFiles: [
'<rootDir>/tst/polyfills.ts',
'<rootDir>/tst/jest.setup.ts',
],
а также с помощью метода Jest defineProperty, но все равно не повезло.
Object.defineProperty((window as any), 'global', {});
copyProps(window, global);
Кто-нибудь может решить это для Jest или знает, как я могу это сделать? @amitport есть идеи?
Спасибо,
@eldem и другие. Я закрываю это, так как эта ветка стала слишком общей смесью, возможно, не связанных между собой вопросов. Если кто-то видит проблему, связанную с глобальным и socket.io-клиентом, пожалуйста, откройте новую проблему с инструкциями по воспроизведению, ошибками, отображаемыми в консоли, используемыми версиями и т. д.
Работа с Ionic4/Angular7 — установка 2.1.1 и добавление (window as any).global = window
в \srcpolyfills.ts сработали — спасибо!
На мой вопрос выше: Babel вызывал ошибку при преобразовании файла socket.io. Добавление его в transformIgnore сработало для меня.
transformIgnorePatterns: [
'<rootDir>/node_modules/../lib/socket.io.js'
]
Метод @amitport работает отлично
Самый полезный комментарий
Согласно https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:
добавление следующего
polyfills.ts
должно работать вAngular@6
:В любом случае, эта проблема не должна быть решена IMO, socket.io-client должен либо удалить неявную зависимость от
global
, либо задокументировать необходимость полифилла (любым, использующим предварительно собранные источники, а не только Угловые пользователи)(Кстати, где источники последних
[email protected]
? Может быть, я мог бы помочь)