universal: window is not defined
- I’m submitting a …
- [ x] bug report
- [ ] feature request
- [ ] support request => Please do not submit support request here, see note at the top of this template.
- What modules are related to this Issue?
- [ ] aspnetcore-engine
- [x ] express-engine
- [ ] hapi-engine
-
Do you want to request a feature or report a bug? bug
-
What is the current behavior? I followed this tutorial: https://github.com/angular/angular-cli/wiki/stories-universal-rendering used node
dist/server.js
and got this message as expected:
Node server listening on http://localhost:4000
but when I’m trying to access my localhost:4000 I get this in the console:
ERROR { ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
__zone_symbol__currentTask:
ZoneTask {
_zone:
Zone {
_properties: [Object],
_parent: [Object],
_name: 'angular',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } }
ERROR { Error: Uncaught (in promise): ReferenceError: FB is not defined
ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at resolvePromise (c:\workspace\proj\dist\server.js:68637:31)
at resolvePromise (c:\workspace\proj\dist\server.js:68608:17)
at c:\workspace\proj\dist\server.js:68686:17
at ZoneDelegate.invokeTask (c:\workspace\proj\dist\server.js:68267:31)
at Object.onInvokeTask (c:\workspace\proj\dist\server.js:4155:33)
at ZoneDelegate.invokeTask (c:\workspace\proj\dist\server.js:68266:36)
at Zone.runTask (c:\workspace\proj\dist\server.js:68034:47)
at drainMicroTaskQueue (c:\workspace\proj\dist\server.js:68444:35)
at ZoneTask.invokeTask (c:\workspace\proj\dist\server.js:68345:21)
at Server.ZoneTask.invoke (c:\workspace\proj\dist\server.js:68330:48)
rejection:
{ ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
__zone_symbol__currentTask:
ZoneTask {
_zone: [Object],
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } },
promise:
ZoneAwarePromise {
__zone_symbol__state: 0,
__zone_symbol__value:
{ ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49) __zone_symbol__currentTask: [Object] } },
zone:
Zone {
_properties: { isAngularZone: true },
_parent:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
_name: 'angular',
_zoneDelegate:
ZoneDelegate {
_taskCounts: [Object],
zone: [Circular],
_parentDelegate: [Object],
_forkZS: null,
_forkDlgt: null,
_forkCurrZone: [Object],
_interceptZS: null,
_interceptDlgt: null,
_interceptCurrZone: [Object],
_invokeZS: [Object],
_invokeDlgt: [Object],
_invokeCurrZone: [Circular],
_handleErrorZS: [Object],
_handleErrorDlgt: [Object],
_handleErrorCurrZone: [Circular],
_scheduleTaskZS: [Object],
_scheduleTaskDlgt: [Object],
_scheduleTaskCurrZone: [Circular],
_invokeTaskZS: [Object],
_invokeTaskDlgt: [Object],
_invokeTaskCurrZone: [Circular],
_cancelTaskZS: [Object],
_cancelTaskDlgt: [Object],
_cancelTaskCurrZone: [Circular],
_hasTaskZS: [Object],
_hasTaskDlgt: [Object],
_hasTaskDlgtOwner: [Circular],
_hasTaskCurrZone: [Circular] } },
task:
ZoneTask {
_zone:
Zone {
_properties: [Object],
_parent: [Object],
_name: 'angular',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } }
Unhandled Promise rejection: window is not defined ; Zone: <root> ; Task: Promise.then ; Value: { ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
__zone_symbol__currentTask:
ZoneTask {
_zone:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } } ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
ERROR { ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
__zone_symbol__currentTask:
ZoneTask {
_zone:
Zone {
_properties: [Object],
_parent: [Object],
_name: 'angular',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } }
ERROR { Error: Uncaught (in promise): ReferenceError: FB is not defined
ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at resolvePromise (c:\workspace\proj\dist\server.js:68637:31)
at resolvePromise (c:\workspace\proj\dist\server.js:68608:17)
at c:\workspace\proj\dist\server.js:68686:17
at ZoneDelegate.invokeTask (c:\workspace\proj\dist\server.js:68267:31)
at Object.onInvokeTask (c:\workspace\proj\dist\server.js:4155:33)
at ZoneDelegate.invokeTask (c:\workspace\proj\dist\server.js:68266:36)
at Zone.runTask (c:\workspace\proj\dist\server.js:68034:47)
at drainMicroTaskQueue (c:\workspace\proj\dist\server.js:68444:35)
at ZoneTask.invokeTask (c:\workspace\proj\dist\server.js:68345:21)
at Server.ZoneTask.invoke (c:\workspace\proj\dist\server.js:68330:48)
rejection:
{ ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
__zone_symbol__currentTask:
ZoneTask {
_zone: [Object],
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } },
promise:
ZoneAwarePromise {
__zone_symbol__state: 0,
__zone_symbol__value:
{ ReferenceError: FB is not defined
at FacebookService.init (c:\workspace\proj\dist\server.js:48421:36)
at new e (c:\workspace\proj\dist\server.js:109969:16176)
at _createClass (c:\workspace\proj\dist\server.js:9798:17)
at _createProviderInstance$1 (c:\workspace\proj\dist\server.js:9766:26)
at resolveNgModuleDep (c:\workspace\proj\dist\server.js:9751:17)
at NgModuleRef_.get (c:\workspace\proj\dist\server.js:10843:16)
at resolveDep (c:\workspace\proj\dist\server.js:11346:45)
at createClass (c:\workspace\proj\dist\server.js:11205:35)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49) __zone_symbol__currentTask: [Object] } },
zone:
Zone {
_properties: { isAngularZone: true },
_parent:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
_name: 'angular',
_zoneDelegate:
ZoneDelegate {
_taskCounts: [Object],
zone: [Circular],
_parentDelegate: [Object],
_forkZS: null,
_forkDlgt: null,
_forkCurrZone: [Object],
_interceptZS: null,
_interceptDlgt: null,
_interceptCurrZone: [Object],
_invokeZS: [Object],
_invokeDlgt: [Object],
_invokeCurrZone: [Circular],
_handleErrorZS: [Object],
_handleErrorDlgt: [Object],
_handleErrorCurrZone: [Circular],
_scheduleTaskZS: [Object],
_scheduleTaskDlgt: [Object],
_scheduleTaskCurrZone: [Circular],
_invokeTaskZS: [Object],
_invokeTaskDlgt: [Object],
_invokeTaskCurrZone: [Circular],
_cancelTaskZS: [Object],
_cancelTaskDlgt: [Object],
_cancelTaskCurrZone: [Circular],
_hasTaskZS: [Object],
_hasTaskDlgt: [Object],
_hasTaskDlgtOwner: [Circular],
_hasTaskCurrZone: [Circular] } },
task:
ZoneTask {
_zone:
Zone {
_properties: [Object],
_parent: [Object],
_name: 'angular',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } }
Unhandled Promise rejection: window is not defined ; Zone: <root> ; Task: Promise.then ; Value: { ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
__zone_symbol__currentTask:
ZoneTask {
_zone:
Zone {
_properties: {},
_parent: null,
_name: '<root>',
_zoneDelegate: [Object] },
runCount: 0,
_zoneDelegates: null,
_state: 'notScheduled',
type: 'microTask',
source: 'Promise.then',
data: undefined,
scheduleFn: undefined,
cancelFn: null,
callback: [Function],
invoke: [Function] } } ReferenceError: window is not defined
at new e (c:\workspace\proj\dist\server.js:109969:479742)
at createClass (c:\workspace\proj\dist\server.js:11205:26)
at createDirectiveInstance (c:\workspace\proj\dist\server.js:11030:37)
at createViewNodes (c:\workspace\proj\dist\server.js:12471:49)
at createRootView (c:\workspace\proj\dist\server.js:12366:5)
at Object.createProdRootView [as createRootView] (c:\workspace\proj\dist\server.js:13051:12)
at ComponentFactory_.create (c:\workspace\proj\dist\server.js:10138:46)
at ComponentFactoryBoundToModule.create (c:\workspace\proj\dist\server.js:3607:29)
at ApplicationRef_.bootstrap (c:\workspace\proj\dist\server.js:5042:57)
at c:\workspace\proj\dist\server.js:4820:81
-
What is the expected behavior? Should access my angular project instead throwing an error
-
What is the motivation / use case for changing the behavior? bug fix
-
Please tell us about your environment:
- Angular version: 4.0.0
- Browser: all
- Language:all
- OS: Windows
- Platform:NodeJS
- Other information (e.g. detailed explanation, stacktraces, related issues, suggestions how to fix, links for us to have context, eg. stackoverflow, gitter, etc)
About this issue
- Original URL
- State: closed
- Created 7 years ago
- Reactions: 1
- Comments: 57 (1 by maintainers)
You can fix
window is not defined
like this: server.ts (start of file)look: https://github.com/Angular-RU/angular-universal-starter/blob/master/server.ts
“window is not defined” came from 3rd party library which accessing window variable.
You should wrapping your code with browser check condition
In html,
In ts,
I’ve found a workaround to fix the issue by adding
"module": "commonjs"
to"compilerOptions"
oftsconfig.server.json
. It seems this is a configuration of Angular Universal 8. Yet, I’ve got it working on v9 and v10. Note that we still needdomino
workaround. Hope this helps.For more info: https://angular.io/guide/migration-update-module-and-target-compiler-options
@wattachai you are a life saver, I finally got it working on Angular 11 with Ivy (I had a problem using firebaseui, which depends on the window). Two main points for anyone stumbling on this:
Here’s my package.json, tsconfig.server.ts and server.ts for who may need a reference
package.json
tsconfig.server.ts
server.ts
this may or may not help someone so ill post in case it does. i had some strange issues when using
const domino = require('domino')
. i was missing methods on some objects. to resolve this, i referenced the module that gets bundled withinplatform-server
const domino = require('@angular/platform-server/node_modules/domino');
not entirely sure why the two references were different but there you go
@kenji-1996 Good point. the best way to support material2 with ssr is import hammerjs in main.ts
Material guide already said hammerjs should be imported from main.ts (not polyfills.ts or app.module) https://github.com/angular/material2/blob/master/guides/getting-started.md
@nimatullah You should put
before
Just want to jump in here and say that I had ‘hammerjs’ imported for Material2 and that was what was giving this issue, removing that (or adding checks for when its in browser) fixed this
With the latest answers, I’ve had
navigator is not defined
, which has an easy fix(global as any).navigator = win.navigator;
.Later,
TypeError: Cannot read property 'charAt' of undefined
popped up. It was doable to have it fixed by removing(global as any).XMLHttpRequest = require('xhr2');
Apparently, the
xhr2
andws
packages weren’t needed, and the code could’ve been dropped as wellI’ve also simplified this part
into
It left me with the whole code as lean as possible
All in
server.ts
, other files were completely fine. Of course, I’ve excluded the 3 useless packages frompackage.json
, i.e.fs
,xhr2
, andws
.Many thanks for contribution to fixing such an irritating error.
PS. Works fine on
Angular 10
, locally rendered byCloud Functions for Firebase
as well as once deploying toFirebase
.Looks like I’m not the only one who has noticed regression after upgrading to
Angular 10
(fromAngular 8
). There are quite some issues open related to that version ofAngular/Universal
such as #1675 #1835Is it maybe related to the fact that
webpack.server.config.js
is no longer needed and how thebuilders
inangular.json
have changed?this way helped me with angular 8 and the webpack build. All is working fine with this solution…
BUT after upgrading to Angular 9 including Angular Universal, Angular CLI (and much more) and using the new Build-Tool Ivy, i am getting window is not defined again.
could anyone help me out?
My Server.ts is looking like this:
EDITED: INFO: #1678 this helped me with this issue…
Please help I tried to solve window issue as you mention then i get this error… … throw err; ^
Error: ENOENT: no such file or directory, open ‘\dist\index.html’ … As my index.html is in dist/browser so i tried to do it like const template = fs.readFileSync(path.join(__dirname, ‘.’, ‘dist/browser’, ‘index.html’)).toString();
still got this error fs.js:114 throw err; ^
Error: ENOENT: no such file or directory, open ‘\dist\index.html’
@andrew273 did you figure it out ?
Hey all!
As this is a common issue, we’ve released some helper methods & directives (more to come soon! SEO-helpers/etc) available at:
@trilon/ng-universal
Ability to mock window/document that are extendable (incase you need to add additional properties)
<ng-container *isBrowser>
(and*isServer
) helper DirectivesMore to come soon!
@danieldanielecki @michelepatrassi, after several hours and tests done, I almost gave up, but thanks to your answers I was able to compile my project in Angular Universal.
this is my config:
this issue delaying our production release by week now, anyone might have encountered on angular 10 (we have implemented domino and tried all sorts of placements of configurations)
Window not defined, caused by keycloak-js
if that polyfill isnt working you might just need to implement Blob yourself using a Buffer in node.
I have solved the Window error but I am getting this error now, can anyone help?
I’ve added
but this gives an error:
To anyone recommending to have the browser get mocked with lines like…
there may be unexpected effects that break server side rendering. I’ve just spent many many hours tracking down a server side prerendering bug with the AngularFire2 Database Observable not emiting anything at all.
Since it the Observable was working with ng serve --prod, I was focused on either the webpack traspilation process or a possible firewall on websocket for node. Although for some reason uncommenting out the line:
allowed the angularfire2 observable to emit properly again. I’m not sure why it does this, but I felt it was important to point this out if anyone relies on angularfire2 observables emiting data for server side rendering.
@Ks89 in https://github.com/Angular-RU/angular-universal-starter/blob/master/server.ts line 94: