Skip to content

Instantly share code, notes, and snippets.

@brandonroberts
Last active April 26, 2019 12:40
Show Gist options
  • Star 31 You must be signed in to star a gist
  • Fork 4 You must be signed in to fork a gist
  • Save brandonroberts/02cc07face25886fe142c4dbd8da1340 to your computer and use it in GitHub Desktop.
Save brandonroberts/02cc07face25886fe142c4dbd8da1340 to your computer and use it in GitHub Desktop.
Webpack Async NgModule Loader
import {Injectable, NgModuleFactory, NgModuleFactoryLoader, Compiler, Type} from '@angular/core';
class LoaderCallback {
constructor(public callback) {}
}
export let load: Type = (callback: Function) => {
return new LoaderCallback(callback);
};
/**
* NgModuleFactoryLoader that uses Promise to load NgModule type and then compiles them.
* @experimental
*/
@Injectable()
export class AsyncNgModuleLoader implements NgModuleFactoryLoader {
constructor(private compiler: Compiler) {}
load(modulePath: string|LoaderCallback): Promise<NgModuleFactory<any>> {
if (modulePath instanceof LoaderCallback) {
let loader = (modulePath as LoaderCallback).callback();
return Promise
.resolve(loader)
.then((type: any) => checkNotEmpty(type, '', ''))
.then((type: any) => this.compiler.compileModuleAsync(type));
}
return Promise.resolve(null);
}
}
function checkNotEmpty(value: any, modulePath: string, exportName: string): any {
if (!value) {
throw new Error(`Cannot find '${exportName}' in '${modulePath}'`);
}
return value;
}
import {NgModuleFactoryLoader} from '@angular/core';
import {AsyncNgModuleLoader} from './async-ng-module-loader';

// Add to main providers
{provide: NgModuleFactoryLoader, useClass: AsyncNgModuleLoader}
import {load} from './async-ng-module-loader';

{
  path: 'lazy',
  loadChildren: load(() => new Promise(resolve => {
      (require as any).ensure([], require => {
        resolve(require('./lazy-module').LazyModule);
      })
    }))
},
Copy link

ghost commented Mar 22, 2017

Same error than @masagatech trying to fix it right now.

@haisaco
Copy link

haisaco commented Apr 11, 2017

same error @masagatech trying to fix it right now

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment