Socket.io-client: [bug] global n'est pas défini

Créé le 24 oct. 2017  ·  49Commentaires  ·  Source: socketio/socket.io-client

Remarque : pour les questions d'assistance, veuillez utiliser l'un de ces canaux : stackoverflow ou slack

Vous voulez:

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

Comportement actuel

socket.io-client ne fonctionne pas avec @angular/ [email protected] à cause d'une dépendance sur node.js' global var
(semble provenir de [email protected] , mais je ne trouve pas qui maintient ces versions)

Étapes à reproduire (si le comportement actuel est un bogue)

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

Comportement attendu

Installer

  • SE :
  • navigateur:
  • version socket.io : 2.0.4

Commentaire le plus utile

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

ajouter le polyfills.ts suivant devrait fonctionner dans Angular@6 :

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

Dans tous les cas, ce problème ne devrait pas être résolu à l'OMI, socket.io-client devrait soit supprimer la dépendance implicite sur global , soit documenter qu'un polyfill est nécessaire (par toute personne utilisant les sources pré-groupées, pas seulement Utilisateurs angulaires)

(Au fait, où sont les sources des derniers [email protected] ? Je pourrais peut-être vous aider)

Tous les 49 commentaires

Également confronté à ce problème actuellement

Puisque https://github.com/angular/angular-cli/issues/8160 est maintenant résolu, pouvons-nous fermer ce problème ? Merci!

Je ne pense pas, car dans angular/cli> 6, ils ont définitivement supprimé global.
Pouvez-vous s'il vous plaît recommencer à chercher? https://github.com/angular/angular-cli/issues/9827

BR,
Kévin

Une solution de contournement jusqu'à ce que Angular CLI le corrige ou permette de remplacer la commande node, vous pouvez alors ajouter le fichier slim socket.io-client dans la section paths du tsconfig.app.json

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

Même si cela fonctionne actuellement, selon https://github.com/angular/angular-cli/issues/9827#issuecomment -369578814, ce sera un problème dans Angular@6 :

"[cela] crée généralement une situation où le code du navigateur qui ne devrait pas fonctionner du tout ne fonctionne que lorsqu'il est intégré avec des outils très spécifiques. Ce n'est pas une bonne situation. "

Je confirme qu'il est cassé dans Angular 6 RC5. Est-ce que quelqu'un connaît une solution de contournement?

@ngervasi nous l'avons fait en faisant comme je l'ai commenté ici : https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639

J'ai essayé:

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

mais ça ne marche pas dans Angular 6RC5, j'ai toujours l'erreur :

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)

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

ajouter le polyfills.ts suivant devrait fonctionner dans Angular@6 :

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

Dans tous les cas, ce problème ne devrait pas être résolu à l'OMI, socket.io-client devrait soit supprimer la dépendance implicite sur global , soit documenter qu'un polyfill est nécessaire (par toute personne utilisant les sources pré-groupées, pas seulement Utilisateurs angulaires)

(Au fait, où sont les sources des derniers [email protected] ? Je pourrais peut-être vous aider)

Quelle est la meilleure solution ? https://github.com/socketio/socket.io-client/issues/1166#issuecomment -379225639 (ajout aux chemins dans tsconfig) ou https://github.com/socketio/socket.io-client/issues/1166 #issuecomment -386195105 (attribué à global) ?

Les deux options ont fonctionné pour moi dans le projet Angular v6 généré avec Angular CLI.

@amitport les sources du paquet has-binary2 sont ici : https://github.com/darrachequesne/has-binary

Même si j'ai bien peur que ce ne soit pas le seul cas.

@darrenmothersele ne pense pas qu'il y ait exactement un "meilleur". L'ajout de 'global' peut avoir des effets secondaires pour d'autres bibliothèques tandis que l'ajout du fichier 'slim' peut avoir un effet négatif sur la taille du bundle (pas nécessairement)

@darrachequesne a ajouté un PR https://github.com/darrachequesne/has-binary/pull/4 (c'est un début :))

J'ai essayé les deux solutions et avec un projet angular 6.0.0 actuel et aucun ne fonctionne. J'ai ajouté l'entrée des chemins à tsconfig.app.json et l'entrée à polyfills.ts mais j'obtiens toujours la même erreur dans chrome.

pareil ici, la solution tsconfig ne fonctionne pas sur ng cli 6

// Ajoute global à window, en attribuant la valeur de window elle-même.
(window as any).global = window;

travaille pour moi
Merci.

Fonctionne pour moi aussi! Merci!

Ça marche pour moi aussi ! Merci beaucoup ! :RÉ

où as-tu mis (window as any).global = window; ?
Merci.

Bonjour,

Juste là (sur la photo).

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

où avez-vous mis (window as any).global = window; ?
Merci.


Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-389975067 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/APZTlGpMwMpnAscifHT2ZQrRUSJqLejCks5tzcp3gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Développeur web full-stack chez Leaf Websites

Site web : www.leaf-website.esy.es http://www.leaf-website.esy.es
Mail : a.tussy.
Tél : 07 77 83 29 44

où as-tu mis...

Mettez ceci dans votre polyfills.ts

(window as any).global = window

entre les lignes 63 et 70

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

où as-tu mis...

Mettez ceci dans votre polyfills.ts

(window as any).global = window


Vous recevez ceci parce que vous avez commenté.
Répondez directement à cet e-mail, consultez-le sur GitHub
https://github.com/socketio/socket.io-client/issues/1166#issuecomment-393592879 ,
ou couper le fil
https://github.com/notifications/unsubscribe-auth/APZTlPci9GKE3R8lwc1g3qfqWODeXIPiks5t4Br1gaJpZM4QD_kq
.

--

Arnaud Tussy-Vassilieff
Développeur web full-stack chez Leaf Websites

Site web : www.leaf-website.esy.es http://www.leaf-website.esy.es
Mail : a.tussy.
Tél : 07 77 83 29 44

@amitport remercie la solution de contournement que vous avez fournie fonctionne !! @AngularTeam , Comment se fait-il que vous continuiez à tout casser les gars :/ vous avez même réussi à faire entrer vos gens dans l'équipe rxjs et tout à coup même rxjs casse tout maintenant sur les changements de version ... j'ai suivi angulaire depuis la première version stable et je suis étonné de votre possibilité de tout casser à chaque release.

@LucasFrecia c'est un problème socket.io pas celui d'Angular. Angular a fait du bien en arrêtant de le cacher dans la version 6 (qui est marquée comme une version de rupture majeure)

Ajout d'une autre pull request il y a deux semaines https://github.com/webmodules/blob/pull/14 pour https://github.com/webmodules/blob (utilisé par engine.io-parser).

Il ne reçoit aucune réponse, n'importe qui ici peut le fusionner ? @darrachequesne @rauchg @nkzawa?

Ajout de (window as any).global = window; aux polyfills.ts a fonctionné pour moi

@amitport merci.
Ça fonctionne bien

Je mets la (window as any).global = window dans le fichier polyfills.ts
Il ne donne pas le ReferenceError: global is not defined dans localhost mais il donne cette erreur si j'essaie d'exécuter la version de production avec http-server à des fins de test.
Une idée de pourquoi cela se produit?
C'est hyper urgent !

Bonjour @gupta82anish ,
J'ai mis (window as any).global = window; dans le fichier pollyfills.ts et j'ai exécuté le projet dans localhost (développement) et je l'ai construit pour la production et je n'ai reçu aucune erreur.
Cela a fonctionné comme un charme.

La solution de contournement (window as any).global = window; dans pollyfills.ts semble fonctionner pour moi dans angular core 6.1.0. Espérons que socket.io sera bientôt mis à jour.

(window as any).global = window; dans pollyfills.ts a également fonctionné pour moi !!

(window as any).global = window;
C'est une très bonne solution. Mais est-ce la bonne façon de faire les choses ?

@avinexus7 ce n'est pas la bonne façon de faire les choses. C'est une solution de contournement pour un problème ouvert dans socket.io-client : l'utilisation de l'objet 'global', qui n'existe pas dans les navigateurs.

(AFAIK, personne ne fait d'effort pour résoudre ce problème, voir ignoré : https://github.com/socketio/engine.io-parser/issues/99 et https://github.com/webmodules/blob/pull /14)

@amitport pourriez-vous s'il vous plaît contacter le support NPM, afin qu'il vous accorde les droits de publier une nouvelle version du package blob ?

@darrachequesne - c'est fait, j'ai soumis une demande à NPM

(window as any).global = window
ou
(window as any) = window
ajoutez le code ci-dessus dans le fichier polyfills.ts .

Selon angular/angular-cli#8160 (commentaire) :

ajouter le polyfills.ts suivant devrait fonctionner dans Angular@6 :

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

Dans tous les cas, ce problème ne devrait pas être résolu à l'OMI, socket.io-client devrait soit supprimer la dépendance implicite sur global , soit documenter qu'un polyfill est nécessaire (par toute personne utilisant les sources pré-groupées, pas seulement Utilisateurs angulaires)

(Au fait, où sont les sources des derniers [email protected] ? Je pourrais peut-être vous aider)

Oui, cela a fonctionné pour moi aussi. Merci

où as-tu mis...

Mettez ceci dans votre polyfills.ts

(window as any).global = window

@bibhas2 Génial ! travaillé pour moi

éventuellement corrigé maintenant que https://github.com/socketio/engine.io-parser/releases/tag/2.1.3 est publié (la réinstallation de socket.io-client sans package-lock peut être nécessaire)

ne fonctionne pas avec
├─ moteur. [email protected]
└─ prise. [email protected]

@kartikupadhyay90 pouvez-vous ajouter des détails ?

après la mise à niveau vers 2.2.0 dans mon application ReactNative, mon instance de socket.io ne reçoit pas de notification du serveur. J'ai dû rétrograder à 2.1.1

@alimek êtes-vous sûr que votre bogue est lié à ce problème ? est donc s'il vous plaît ajouter des détails. Sinon, merci de poster un nouveau sujet

@amitport si c'est le seul changement entre la version précédente et 2.2.0, alors je suppose que oui

@alimek reformule : si votre bogue est _le même_ que celui-ci, ajoutez des détails. Sinon, veuillez ouvrir un nouveau problème (qui peut être une régression).

(BTW, je ne suis pas responsable de cette bibliothèque, je commente simplement le fonctionnement général de la gestion des problèmes. Si vous souhaitez que votre problème soit résolu, vous devez ajouter des détails exploitables et le publier de manière appropriée)

Dans ma situation, il semble que 2.2.0 dépend de "engine.io-client": "~3.3.1", qui dépend de "engine.io-parser": "~2.1.1". Cependant, l'engine.io-parser sur mon système semble être 2.1.2 qui contient toujours des références à la variable 'global'. Il semble que cela ait été corrigé dans 2.1.3, mais le npm i semble tirer 2.1.2

Si je devais faire une supposition, il semble qu'il pourrait revenir à 2.1.2 car la dernière version pour 2.1.3 a échoué
https://travis-ci.org/socketio/engine.io-parser

En dehors de cela, je ne comprends pas pourquoi il continue de tirer l'ancienne version pour moi

J'ai le même problème avec Jest + React + Typescript, et je n'ai pas pu le résoudre en définissant (window as any).global = window . J'ai également essayé de mettre le code dans un fichier polyfills.ts ,

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

et également en utilisant la méthode defineProperty de Jest, mais toujours pas de chance.

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

copyProps(window, global);

Quelqu'un est-il capable de résoudre ce problème pour Jest, ou sait-il comment je peux faire en sorte que cela fonctionne ? @amitport une idée?

Merci,

@eldem et autres. Je ferme ceci car ce fil est devenu trop un mélange générique de problèmes peut-être sans rapport. Si quelqu'un voit un problème lié à global et socket.io-client, veuillez ouvrir un nouveau problème avec les instructions de reproduction, les erreurs affichées dans la console, les versions utilisées, etc.

Travailler avec Ionic4/Angular7 - installer 2.1.1 et ajouter (window as any).global = window dans \srcpolyfills.ts a fonctionné - Merci !

Pour ma question ci-dessus: Babel provoquait l'erreur lors de la transformation du fichier socket.io. L'ajouter dans le transformIgnore a fonctionné pour moi.

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

La méthode @amitport fonctionne parfaitement

Cette page vous a été utile?
0 / 5 - 0 notes