Angular:错误:在webpackAsyncContext中未捕获(在promise中)(eval at ./src/$$_lazy_route_resource

时间:2018-02-26 15:00:47

标签: javascript angular lazy-loading angular-routing angular-router

我从 Angular 4.0.0 升级到 Angular 5.2.6

我面临一些问题,让懒惰的模块加载工作。

angular 4.0.0 ,它运行正常,但现在, 5.2.6 ,点击我的重定向按钮时出现这样的错误:

core.js:1448 ERROR Error: Uncaught (in promise): TypeError: undefined is not a function
TypeError: undefined is not a function
    at Array.map (<anonymous>)
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:27), <anonymous>:13:34)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6558)
    at SystemJsNgModuleLoader.load (core.js:6542)
    at RouterConfigLoader.loadModuleFactory (router.js:4543)
    at RouterConfigLoader.load (router.js:4523)
    at MergeMapSubscriber.eval [as project] (router.js:2015)
    at MergeMapSubscriber._tryNext (mergeMap.js:128)
    at MergeMapSubscriber._next (mergeMap.js:118)
    at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
    at Array.map (<anonymous>)
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:27), <anonymous>:13:34)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6558)
    at SystemJsNgModuleLoader.load (core.js:6542)
    at RouterConfigLoader.loadModuleFactory (router.js:4543)
    at RouterConfigLoader.load (router.js:4523)
    at MergeMapSubscriber.eval [as project] (router.js:2015)
    at MergeMapSubscriber._tryNext (mergeMap.js:128)
    at MergeMapSubscriber._next (mergeMap.js:118)
    at MergeMapSubscriber.Subscriber.next (Subscriber.js:92)
    at resolvePromise (zone.js:809)
    at resolvePromise (zone.js:775)
    at eval (zone.js:858)
    at ZoneDelegate.invokeTask (zone.js:421)
    at Object.onInvokeTask (core.js:4740)
    at ZoneDelegate.invokeTask (zone.js:420)
    at Zone.runTask (zone.js:188)
    at drainMicroTaskQueue (zone.js:595)
    at ZoneTask.invokeTask [as invoke] (zone.js:500)
    at invokeTask (zone.js:1517)

我的路由文件如下所示:

const homeRoutes: Routes = [
  {
    path: 'home', component: HomeComponent,
    children: [
        ....
      {
        path: 'admin',
        loadChildren: 'app/home/admin/admin.module#AdminModule',
        canActivate: [AuthGuardAdmin]
      },
    ]
  },
];

@NgModule({
  imports: [
    CommonModule,
    RouterModule.forChild(homeRoutes)
  ],
  exports: [
    RouterModule
  ],
  declarations: []
})
export class HomeRoutingModule { }

建议??

10 个答案:

答案 0 :(得分:38)

请勿在主app.module.ts中导入延迟加载的模块。这将导致循环依赖并抛出您正在接收的错误。

答案 1 :(得分:15)

我已按照here

更改了axios.post中的导入顺序

所以你需要这样的例子:

app.module.ts

最重要的是首先imports: [ BrowserModule, FormsModule, HeroesModule, AppRoutingModule ] ,最后是BrowserModule

答案 2 :(得分:12)

解决方案1 ​​

进口顺序确实很重要,因此import lazy loaded module在顶部,router module在最后。因为我们正在进行延迟加载,所以在进行路由之前,必须先存在该延迟加载的模块。

imports: [
    BrowserModule,       
    HeroModule, // Lazy-loaded module

    AppRoutingModule
  ],

解决方案2

通常Angular CLI会在生成moduleapp-module时将其导入。因此请确保lazy-loaded模块未如here

所述导入app-module

答案 3 :(得分:11)

我遇到了同样的问题。这可能是angular-cli的错误。我仍然不确定错误是在cli中还是在我们的代码中!如Gerrit所述,它仍然可以用aot编译: ng serve --aot

我也通过将我的angular-cli从 1.7.2 降级到 1.6.8 来解决了这个问题,这是最后一个似乎有效的CLI版本就我们而言。

答案 4 :(得分:10)

https://github.com/angular/angular-cli/issues/9488#issuecomment-368871510中所述,它似乎适用于ng serve --aot

答案 5 :(得分:6)

ng service --aot在编译代码时不是解决方案,只是掩盖。 如果您确定它不是CLI版本,请尝试以下解决方案。

您需要做的是确保您没有在app.module.ts中加载延迟加载的模块。

例如:

app.module.ts
 imports: [
   ...
   AppRouterModule,
   FormsModule,
   YourFeatureModule, <--- remove this
   ...
 ]

确保通过YourFeatureMOdule正在加载routes 即:

app-routing.module.ts
 loadChildren: '../app/feature.module#YourFeatureModule'

希望这会有所帮助

答案 6 :(得分:3)

我已经通过将devDependenices(package.json)中的mt angular-cli 1.2.0 升级到 1.6.7来解决了这个问题

答案 7 :(得分:3)

面临同样的问题。重新启动角度服务器ng-serve对我有用。

答案 8 :(得分:2)

我有完全相同的问题但只是重新启动节点服务器(ng s)为我做了诀窍。

根据经验:如果角度开始表现异常,首先尝试重新启动节点服务器

答案 9 :(得分:0)

使用ng serve --aot代替。通常是Angular CLI在生成时将延迟加载的Angular模块添加到AppModule中。