Socket.io-client: [bug] global ist nicht definiert

Erstellt am 24. Okt. 2017  ·  49Kommentare  ·  Quelle: socketio/socket.io-client

Hinweis : Verwenden Sie für Supportfragen bitte einen dieser Kanäle: stackoverflow oder slack

Sie wollen:

- [x] report a *bug*
- [ ] request a *feature*

Aktuelles Verhalten

socket.io-client funktioniert nicht mit @angular/[email protected] rc.3 wegen einer Abhängigkeit von node.js' global var
(scheint von [email protected] zu stammen, aber ich kann nicht finden, wer diese Versionen pflegt)

Schritte zum Reproduzieren (wenn das aktuelle Verhalten ein Fehler ist)

siehe https://github.com/angular/angular-cli/issues/8160

Erwartetes Verhalten

Aufstellen

  • Betriebssystem:
  • Browser:
  • socket.io-Version: 2.0.4

Hilfreichster Kommentar

Laut https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

Das Hinzufügen des folgenden polyfills.ts sollte in Angular@6 funktionieren:

// Add global to window, assigning the value of window itself.
(window as any).global = window;

In jedem Fall sollte dieses Problem meiner Meinung nach nicht behoben werden, socket.io-client sollte entweder die implizite Abhängigkeit von global entfernen oder dokumentieren, dass ein Polyfill erforderlich ist (von jedem, der die vorgebündelten Quellen verwendet, nicht nur Angular-Benutzer)

(Übrigens, wo sind die Quellen für die neuesten [email protected] ? Vielleicht könnte ich helfen)

Alle 49 Kommentare

Stehe aktuell auch vor diesem Problem

Da https://github.com/angular/angular-cli/issues/8160 nun behoben ist, können wir dieses Problem schließen? Danke!

Ich glaube nicht, weil sie im Winkel/Kli > 6 dauerhaft global entfernt wurden.
Kannst du bitte nochmal anfangen zu recherchieren? https://github.com/angular/angular-cli/issues/9827

BR,
Kevin

Eine Problemumgehung, bis Angular CLI das Problem möglicherweise behebt oder es möglich macht, den Knotenbefehl zu überschreiben. Anschließend können Sie die Socket-.io-Client-Slim-Datei im Pfadabschnitt von tsconfig.app.json hinzufügen

"paths": {
      ....
      "socket.io-client": ["../node_modules/socket.io-client/dist/socket.io.slim.js"]
}

Selbst wenn es derzeit funktioniert, wird dies laut https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814 ein Problem in Angular@6 sein:

„[dies] sorgt im Allgemeinen für eine Situation, in der Browsercode, der überhaupt nicht funktionieren sollte, nur dann funktioniert, wenn er mit sehr spezifischen Tools eingebaut wird. Das ist keine gute Situation.“

Ich bestätige, dass es in Angular 6 RC5 defekt ist. Kennt jemand Abhilfe?

@ngervasi wir haben es so gemacht, wie ich es hier kommentiert habe: https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639

Ich habe es versucht:

{ "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"] } }

aber es funktioniert nicht in Angular 6RC5, ich bekomme immer noch den Fehler:

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)

Laut https://github.com/angular/angular-cli/issues/8160#issuecomment -386153833:

Das Hinzufügen des folgenden polyfills.ts sollte in Angular@6 funktionieren:

// Add global to window, assigning the value of window itself.
(window as any).global = window;

In jedem Fall sollte dieses Problem meiner Meinung nach nicht behoben werden, socket.io-client sollte entweder die implizite Abhängigkeit von global entfernen oder dokumentieren, dass ein Polyfill erforderlich ist (von jedem, der die vorgebündelten Quellen verwendet, nicht nur Angular-Benutzer)

(Übrigens, wo sind die Quellen für die neuesten [email protected] ? Vielleicht könnte ich helfen)

Was ist die bessere Lösung? https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (Pfade in tsconfig hinzufügen) oder https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (Zuweisung an global)?

Beide Optionen haben für mich in einem mit Angular CLI generierten Angular v6-Projekt funktioniert.

@amitport die Quellen für das Paket has-binary2 sind hier: https://github.com/darrachequesne/has-binary

Obwohl ich fürchte, es ist nicht das einzige Vorkommen.

@darrenmothersele glaube nicht, dass es genau ein "besser" gibt. Das Hinzufügen von „global“ kann Nebenwirkungen für andere Bibliotheken haben, während das Hinzufügen der „Slim“-Datei negative Auswirkungen auf die Bundle-Größe haben kann (nicht unbedingt)

@darrachequesne hat eine PR hinzugefügt https://github.com/darrachequesne/has-binary/pull/4 (es ist ein Anfang :))

Ich habe beide Lösungen und mit einem aktuellen Winkel 6.0.0-Projekt ausprobiert und keine funktioniert. Ich habe den Pfadeintrag zu tsconfig.app.json und den Eintrag zu polyfills.ts hinzugefügt, bekomme aber immer noch den gleichen Fehler in Chrome.

Auch hier funktioniert die tsconfig-Lösung nicht auf ng cli 6

// Global zum Fenster hinzufügen, den Wert des Fensters selbst zuweisen.
(Fenster wie jedes).global = window;

arbeitet für mich
Danke.

Funktioniert auch bei mir! Danke!

Bei mir funktioniert es auch! Vielen Dank ! :D

wo hast du (window as any).global = window; ?
Danke.

Hallo,

Genau dort (auf dem Bild).

2018-05-17 21:07 GMT+02:00 Alberto Basaglia [email protected] :

wo hast du (window as any) abgelegt.global = window; ?
Danke.


Sie erhalten dies, weil Sie kommentiert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Entwickeln Sie Full-Stack-Webseiten für Leaf-Websites

Web-Site: www.leaf-website.esy.es http://www.leaf-website.esy.es
Mail: a.tussy.
Tel : 07 77 83 29 44

wo hast du hingelegt...

Legen Sie dies in Ihr polyfills.ts

(window as any).global = window

zwischen Linie 63 und 70

2018-05-31 18:31 GMT+02:00 Bibhas Bhattacharya [email protected] :

wo hast du hingelegt...

Fügen Sie dies in Ihre polyfills.ts ein

(Fenster wie jedes).global = Fenster


Sie erhalten dies, weil Sie kommentiert haben.
Antworten Sie direkt auf diese E-Mail und zeigen Sie sie auf GitHub an
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ,
oder den Thread stumm schalten
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Entwickeln Sie Full-Stack-Webseiten für Leaf-Websites

Web-Site: www.leaf-website.esy.es http://www.leaf-website.esy.es
Mail: a.tussy.
Tel : 07 77 83 29 44

@amitport danke, dass die von Ihnen bereitgestellte Problemumgehung funktioniert !! @AngularTeam , wie kommt es, dass du immer wieder alles kaputt machst, Leute:/ du hast es sogar geschafft, deine Leute in das rxjs-Team zu holen, und plötzlich macht sogar rxjs jetzt bei Versionsänderungen alles kaputt ... Ich halte mit Angular seit der ersten stabilen Veröffentlichung Schritt und bin erstaunt über deine Fähigkeit, bei jeder Veröffentlichung alles kaputt zu machen.

@LucasFrecia , es ist ein socket.io-Problem, nicht das von Angular. Angular tat gut, indem es aufhörte, es in Version 6 zu verstecken (die als Major Breaking Release gekennzeichnet ist)

Vor zwei Wochen wurde ein weiterer Pull-Request hinzugefügt https://github.com/webmodules/blob/pull/14 für https://github.com/webmodules/blob (verwendet von engine.io-parser).

Es kommt keine Antwort, kann das jemand hier zusammenführen? @darrachequesne @rauchg @nkzawa?

Hinzufügen von (window as any).global = window; zu den polyfills.ts hat bei mir funktioniert

@amitport tks.
Es funktioniert gut

Ich habe das Fenster (window as any).global = in die Datei polyfills.ts eingefügt
Es gibt nicht das ReferenceError: global is not defined in localhost, aber es gibt diesen Fehler, wenn ich versuche, den Produktions-Build mit http-Server zu Testzwecken auszuführen.
Irgendeine Ahnung, warum das passiert?
Es ist super dringend!

Hallo @gupta82anish ,
Ich habe (window as any).global = window; in die Datei pollyfills.ts eingefügt und das Projekt in localhost (Entwicklung) ausgeführt sowie für die Produktion erstellt und keinen Fehler erhalten.
Es funktionierte wie Zauber.

Die Problemumgehung für (window as any).global = window; in pollyfills.ts scheint für mich in Angle Core 6.1.0 zu funktionieren. Hoffen wir, dass socket.io bald aktualisiert wird.

(Fenster wie jedes).global = window; in pollyfills.ts hat bei mir auch funktioniert !!

(window as any).global = window;
Das ist eine sehr saubere Lösung. Aber ist es der richtige Weg, Dinge zu tun?

@avinexus7 es ist nicht die richtige Vorgehensweise. Es ist eine Problemumgehung für ein offenes Problem in socket.io-client : die Verwendung eines 'globalen' Objekts, das in Browsern nicht existiert.

(AFAIK, niemand bemüht sich, dieses Problem zu lösen, siehe ignoriert: https://github.com/socketio/engine.io-parser/issues/99 und https://github.com/webmodules/blob/pull /14)

@amitport könnten Sie bitte den NPM-Support erreichen, damit er Ihnen die Rechte einräumt, eine neue Version des blob -Pakets zu veröffentlichen?

@darrachequesne - fertig, ich habe eine Anfrage an NPM gestellt

(window as any).global = window
oder
(window as any) = window
fügen Sie den obigen Code in die Datei polyfills.ts ein.

Laut Winkel/Winkel-cli#8160 (Kommentar) :

Das Hinzufügen des folgenden polyfills.ts sollte in Angular@6 funktionieren:

// Add global to window, assigning the value of window itself.
(window as any).global = window;

In jedem Fall sollte dieses Problem meiner Meinung nach nicht behoben werden, socket.io-client sollte entweder die implizite Abhängigkeit von global entfernen oder dokumentieren, dass ein Polyfill erforderlich ist (von jedem, der die vorgebündelten Quellen verwendet, nicht nur Angular-Benutzer)

(Übrigens, wo sind die Quellen für die neuesten [email protected] ? Vielleicht könnte ich helfen)

Ja, das hat auch bei mir funktioniert. Danke

wo hast du hingelegt...

Legen Sie dies in Ihr polyfills.ts

(window as any).global = window

@bibhas2 Großartig! hat bei mir funktioniert

möglicherweise behoben, nachdem https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 veröffentlicht wurde (Neuinstallation von socket.io-client ohne Paketsperre kann erforderlich sein)

nicht mit arbeiten
├─ Motor. [email protected]
└─ Buchse. [email protected]

@kartikupadhyay90 kannst du Details hinzufügen?

Nach dem Upgrade auf 2.2.0 in meiner ReactNative-App erhält meine Instanz von socket.io keine Benachrichtigung vom Server. Musste auf 2.1.1 heruntergestuft werden

@alimek bist du sicher, dass dein Fehler mit diesem Problem zusammenhängt? Bitte fügen Sie Details hinzu. Ansonsten poste bitte ein neues Thema

@amitport Wenn das die einzige Änderung zwischen der vorherigen Version und 2.2.0 ist, dann denke ich schon

@alimek umformulieren: Wenn Ihr Fehler _derselbe_ wie dieser ist, fügen Sie Details hinzu. Andernfalls öffnen Sie bitte ein neues Problem (das möglicherweise eine Regression ist).

(Übrigens, ich bin kein Betreuer dieser Bibliothek, ich kommentiere nur, wie die Problembehandlung im Allgemeinen funktioniert. Wenn Sie möchten, dass Ihr Problem behoben wird, müssen Sie umsetzbare Details hinzufügen und es entsprechend posten.)

In meiner Situation scheint 2.2.0 von „engine.io-client“ abzuhängen: „~3.3.1“, was von „engine.io-parser“ abhängt: „~2.1.1“. Der engine.io-Parser auf meinem System scheint jedoch 2.1.2 zu sein, der immer noch Verweise auf die Variable „global“ enthält. Es scheint, dass dies in 2.1.3 behoben wurde, aber das npm i scheint 2.1.2 zu ziehen

Wenn ich raten müsste, scheint es, als würde es auf 2.1.2 zurückgesetzt werden, weil der letzte Build für 2.1.3 fehlgeschlagen ist
https://travis-ci.org/socketio/engine.io-parser

Abgesehen davon kann ich nicht herausfinden, warum es immer die ältere Version für mich zieht

Ich habe dasselbe Problem mit Jest + React + Typescript und konnte es nicht beheben, indem ich (window as any).global = window einstellte. Ich habe auch versucht, den Code in eine polyfills.ts -Datei einzufügen,

setupFiles: [
    '<rootDir>/tst/polyfills.ts',
    '<rootDir>/tst/jest.setup.ts',
  ],

und auch mit Jests defineProperty-Methode, aber immer noch kein Glück.

Object.defineProperty((window as any), 'global', {});

copyProps(window, global);

Jeder, der das für Jest lösen kann, oder weiß, wie ich das zum Laufen bringen kann? @amitport eine Idee?

Danke,

@eldem und andere. Ich schließe dies, da dieser Thread zu einer allgemeinen Mischung aus möglicherweise nicht verwandten Problemen geworden ist. Wenn jemand ein Problem im Zusammenhang mit global und socket.io-client sieht, öffnen Sie bitte ein neues Problem mit Anweisungen zur Reproduktion, in der Konsole angezeigten Fehlern, verwendeten Versionen usw.

Arbeiten mit Ionic4/Angular7 - Installation von 2.1.1 und Hinzufügen (window as any).global = window in \srcpolyfills.ts hat funktioniert - Danke!

Zu meiner obigen Frage: Babel verursachte den Fehler beim Transformieren der socket.io-Datei. Das Hinzufügen in transformIgnore hat bei mir funktioniert.

transformIgnorePatterns: [
    '<rootDir>/node_modules/../lib/socket.io.js'
  ]

@amitport Methode funktioniert perfekt

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen