angular: Angular 4 + Universal: Window is not defined

Everything works fine using ng serve and it compiles fine with ngc but I get the following exception at runtime.

ReferenceError: window is not defined
    at Ng2LocationServices.BaseLocationServices (/Users/Michael/Documents/my-app/node_modules/@uirouter/core/lib/vanilla/baseLocationService.js:20:26)
    at new Ng2LocationServices (/Users/Michael/Documents/my-app/dist/out-tsc/src/server.js:3923:28)
    at uiRouterFactory (/Users/Michael/Documents/my-app/dist/out-tsc/src/server.js:2656:30)
    at _callFactory (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:9650:34)
    at _createProviderInstance$1 (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:9579:26)
    at initNgModule (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:9530:13)
    at new NgModuleRef_ (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:10638:9)
    at Object.createNgModuleRef (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:10622:12)
    at NgModuleFactory_.create (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:13901:25)
    at /Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:4588:61
    at ZoneDelegate.invoke (/Users/Michael/Documents/my-app/node_modules/zone.js/dist/zone-node.js:365:26)
    at Object.onInvoke (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:3965:37)
    at ZoneDelegate.invoke (/Users/Michael/Documents/my-app/node_modules/zone.js/dist/zone-node.js:364:32)
    at Zone.run (/Users/Michael/Documents/my-app/node_modules/zone.js/dist/zone-node.js:125:43)
    at NgZone.run (/Users/Michael/Documents/my-app/node_modules/@angular/core/bundles/core.umd.js:3833:62)

this is my app.server.module.ts

import { NgModule } from '@angular/core';
import { ServerModule } from '@angular/platform-server';
import { BrowserModule } from '@angular/platform-browser';
import { AppModule } from './app.module';
import { AppComponent } from './app.component';
import { LocationStrategy } from '@angular/common';
import { UIRouter, MemoryLocationConfig, MemoryLocationService } from '@uirouter/angular';

@NgModule({
    imports: [
        BrowserModule.withServerTransition({ appId: 'my-app' }),
        ServerModule,
        AppModule
    ],
    bootstrap: [AppComponent]
})

export class AppServerModule {
    constructor(router: UIRouter, locationStrategy: LocationStrategy) {
        router.locationConfig = new MemoryLocationConfig();
        router.locationService = new MemoryLocationService(router);
        router.locationService['_url'] = locationStrategy.path(true);
    }
}

Did what #43 said to do but no luck.

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 28 (13 by maintainers)

Most upvoted comments

Right now I’m using DefinePlugin:

new DefinePlugin({
    window: undefined,
    document: undefined,
    location: JSON.stringify({
        protocol: 'https', // `http` or `https`
        host: `your host`,
    })
}),

can you update package hash and try again

"@uirouter/angular": "https://github.com/aitboudad/ng2#a7e3387a7a821c105ce6e8538657d4cd161ed881",