angular-cli: [bug] Uncaught ReferenceError: global is not defined
Bug Report or Feature Request (mark with an x
)
- [X] bug report -> please search issues before submitting
- [ ] feature request
Versions.
Angular CLI: 1.5.0-rc.3
Node: 8.7.0
OS: win32 x64
Angular: 4.4.6
... animations, common, compiler, compiler-cli, core, forms
... http, language-service, platform-browser
... platform-browser-dynamic, router, tsc-wrapped, upgrade
@angular/cdk: 2.0.0-beta.12
@angular/cli: 1.5.0-rc.3
@angular/flex-layout: 2.0.0-beta.9
@angular/material: 2.0.0-beta.12
@angular-devkit/build-optimizer: 0.0.30
@angular-devkit/core: 0.0.20
@angular-devkit/schematics: 0.0.34
@ngtools/json-schema: 1.1.0
@ngtools/webpack: 1.8.0-rc.3
@schematics/angular: 0.0.48
typescript: 2.3.4
webpack: 3.8.1
Repro steps.
create angular/cli project
add dependency and import socket.io-client@2.0.4
ng serve --aot
open browser
The log given by the failure.
index.js:10 Uncaught ReferenceError: global is not defined
at eval (index.js:10)
at Object.../../../../has-binary2/index.js (vendor.bundle.js:2914)
at __webpack_require__ (inline.bundle.js:55)
at eval (index.js:8)
at Object.../../../../socket.io-parser/index.js (vendor.bundle.js:9569)
at __webpack_require__ (inline.bundle.js:55)
at eval (index.js:7)
at Object.../../../../socket.io-client/lib/index.js (vendor.bundle.js:9527)
at __webpack_require__ (inline.bundle.js:55)
at eval (io-service.ts:1)
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 29
- Comments: 37 (8 by maintainers)
Links to this issue
Commits related to this issue
- fix(@angular/cli): Add ability to include node global Fixes #8160 — committed to Brocco/angular-cli by Brocco 7 years ago
- Fixed index.html bug : cf https://github.com/angular/angular-cli/issues/8160#issuecomment-386153833 — committed to jobdoneproject/devoirFaitsFrontNodeJS by PhilippeCorreges 6 years ago
- Fix issue with removal shim for global see https://github.com/angular/angular-cli/issues/8160#issuecomment-386153833 — committed to justiceo/WebChat by deleted user 6 years ago
- Fix for console err: `Uncaught ReferenceError: global is not defined` See: https://github.com/angular/angular-cli/issues/8160 — committed to daleewald/topic-ideation-carbonldp by deleted user 6 years ago
- fix polyfill error with this solution https://github.com/angular/angular-cli/issues/8160#issuecomment-392716566 — committed to Datenschule/datenspaziergang-app by lislis 5 years ago
- Upgrade to Angular 7 (#59) * update to Abgular 7.2.x * update travis * bump more packages * at least it builds * update travis * bump package * bump mapbox packages * bump codely... — committed to Datenschule/datenspaziergang-app by lislis 5 years ago
On version 6 of Angular CLI we are removing the shim for
global
and other node built-ins. You can read more about why this change was made in https://github.com/angular/angular-cli/issues/9827#issuecomment-369578814.If you are using a library that assumes these globals are present, you can try manually shimming it inside your
polyfills.ts
file:I ran a quick test with
socket.io-client
and this seemed to allow it to run.It seems that all the import-statements in the polyfill.ts are hoisted in the compiled polyfill.js. Therefore putting
(window as any).global = window;
at the top of the file polyfill.ts did not solve the issue for me, since in the compiled polyfill.js this command was located at the very end of the file (after all the imports).
Solution
I had to put the line
(window as any).global = window;
in a new file (for example “global-shim.ts”)
and import this file at the very top of the polyfill.ts
import 'global-shim';
In my polyfills.ts, the import references to
intl
were still there. Comment out or delete these if you get stuck, then add(window as any).global= window
as @filipesilva stated above.Same problem here since
1.5.0-rc.3
, with1.5.0-rc.2
no problems…declare var $: any; I am getting the error $ not defined
(window as any).global = window;
topollyfils.ts
, but it didn’t work.1.5.0-rc.1
workedThis is definitely related to https://github.com/angular/angular-cli/pull/8132 as we’ve removed the node
global
object from the compilation environment. I’m investigating what can be done about it.Hi, I am using Dragula version 1.5.0 with Angular 5, and still having problem
"ReferenceError: global is not defined"
I have just installed it, imported and added to NgModule -> Imports, and my app crashes with this error.
Is there any step I am missing??
Just wanted to let you know we’re looking into this. For the
intl
case usingimport 'intl/dist/intl';
instead fixes it, but this might not be possible for all libs.socket.io-client
also seems to have a dist insocket.io-client/dist/socket.io.js
. I don’t think the same can be used withng-socket-io
however, since it’s importing the node package inside of it…This is fixed for me with release
1.5.0-rc.8
(https://github.com/angular/angular-cli/pull/8250). Thanks!There’s a pull request which I assume will fix it guess we just need to wait for it to be added
https://github.com/angular/angular-cli/pull/8189
@RicardoVaranda https://github.com/dottodot/ang5-test
All i’ve done is create a new project with 1.5.0-rc.3 and included
import 'intl';
in polyfills.ts and you get the errorI seeing the same issue as well with
ng-socket-io
but also withimport 'intl';
inpolyfills.ts
Yes.
global
does not exist in a browser. A library that supports web browsers should not be using Node.js specific functionality.Thanks that worked. I’ve gone back to
1.5.0-rc.2
and that’s ok for me so seems like the issue is in1.5.0-rc.3
@willkara, read the comment right before yours.
Follow the stack trace to see which package uses
global
. submit an actionable, reproducible issue on that package repo(also, “happens in new projects.” is very different from happened when you “tried adding a basic AwsAmplify”)
Is this the right way of implementing socket.io in Angular 2? I mean does the above line give any side affects that may be obtrusive in the future?
I removed all these things.
import 'intl'; (window as any).global = window; // Run
npm install --save intl. import 'intl/locale-data/jsonp/en';
AND NOW 😄 This polyfill.ts is working for me.
`import ‘core-js/es6/symbol’; import ‘core-js/es6/object’; import ‘core-js/es6/function’; import ‘core-js/es6/parse-int’; import ‘core-js/es6/parse-float’; import ‘core-js/es6/number’; import ‘core-js/es6/math’; import ‘core-js/es6/string’; import ‘core-js/es6/date’; import ‘core-js/es6/array’; import ‘core-js/es6/regexp’; import ‘core-js/es6/map’; import ‘core-js/es6/weak-map’; import ‘core-js/es6/set’;
import ‘core-js/es7/array’;
/** IE10 and IE11 requires the following for NgClass support on SVG elements */ import ‘classlist.js’; // Run
npm install --save classlist.js
./** IE10 and IE11 requires the following for the Reflect API. */ import ‘core-js/es6/reflect’;
/** Evergreen browsers require these. **/ // Used for reflect-metadata in JIT. If you use AOT (and only Angular decorators), you can remove. import ‘core-js/es7/reflect’;
/**
@angular/common/animations
.npm install --save web-animations-js
./***************************************************************************************************
/***************************************************************************************************
/**