SocketCluster/socketcluster-client

global is not defined in Angular 6

DanielRose opened this issue ยท 6 comments

I am using this in an Angular app. After upgrading to Angular 6, I get the following error:

sctransport.js:7 Uncaught ReferenceError: global is not defined
at Object../node_modules/socketcluster-client/lib/sctransport.js (sctransport.js:7)
at webpack_require (bootstrap:81)
at Object../node_modules/socketcluster-client/lib/scclientsocket.js (scclientsocket.js:6)
at webpack_require (bootstrap:81)
at Object../node_modules/socketcluster-client/index.js (index.js:1)
at webpack_require (bootstrap:81)
at Object../src/app/SocketClusterClient.ts (main.js:916)

The SocketClusterClient.ts is my code, and includes

import * as sc from 'socketcluster-client';

The reason is that Angular no longer includes shims for node globals. As a workaround I can manually shim it, but it would be better to solve this here.

For those wondering, the shim is (<any>window).global = window. Simple enough, but should not be necessary.

Same issue in a newly created Vue/Vite project with socketcluster-client 17.1.1.
Easily worked around by adding define: { global: {} } in vite.config.ts, but a bit annoying...

This line seems to be the culprit:

if (global.WebSocket) {

Should be fixed now without the need for a shim though I didn't test with any specific framework . Feel free to reopen if needed.

@jondubois thanks, that was quick! :)
Unfortunately on Vue/Vite without the global shim I now get the same error from this line:

if (isBrowser && this.disconnectOnUnload && global.addEventListener && global.removeEventListener) {

Replacing global with window in clientsocket.js worked for me...

@minsulander OK. I pushed another update socketcluster-client@17.2.2 just now which should fix this issue as well. It's probably best to upgrade as there were other parts in the code which had global references which could affect edge cases. Let me know if there is any other issue.

Well done @jondubois, works like a charm now with 17.2.2.
Thanks a bunch!