【问题标题】:Lazy load Angular 5 error: $$_lazy_route_resource lazy recursive延迟加载 Angular 5 错误:$$_lazy_route_resource 延迟递归
【发布时间】:2018-02-23 11:55:09
【问题描述】:

我正在使用 Angular cli AoT 编译。 当我尝试在此 tutorial 之后制作延迟加载组件时,出现以下错误:

ERROR Error: Uncaught (in promise): TypeError: __webpack_require__.e is not a function
TypeError: __webpack_require__.e is not a function
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:13), <anonymous>:15:29)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6554)
    at SystemJsNgModuleLoader.load (core.js:6538)
    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 ScalarObservable._subscribe (ScalarObservable.js:51)
    at webpackAsyncContext (eval at ./src/$$_lazy_route_resource lazy recursive (main.bundle.js:13), <anonymous>:15:29)
    at SystemJsNgModuleLoader.loadAndCompile (core.js:6554)
    at SystemJsNgModuleLoader.load (core.js:6538)
    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 ScalarObservable._subscribe (ScalarObservable.js:51)
    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:4736)
    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)

这是我的部分代码:

app-routing.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { RouterModule, Routes } from '@angular/router';

const routes: Routes = [
  { path: 'listes', loadChildren: 'app/component/list/list.module#ListModule'}
];

@NgModule({
  imports: [
    RouterModule.forRoot(routes)
  ],
  declarations: [],
  exports: [ RouterModule ]
})
export class AppRoutingModule { }

list-routing.module.ts

import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';

import { ListComponent } from './list.component';

const routes: Routes = [] = [
  { path: '', component: ListComponent }
];

@NgModule({
  imports: [RouterModule.forChild(routes)],
  exports: [RouterModule]
})
export class ListRoutingModule { }

list.module.ts

import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';

import { ListRoutingModule } from './list-routing.module';

import { ListComponent } from './list.component';

@NgModule({
  imports: [
    CommonModule,
    ListRoutingModule
  ],
  declarations: [ ListComponent ]
})
export class ListModule { }

app.module.ts

import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';

import { AppComponent } from './app.component';
import { HeaderComponent } from './component/header/header.component';
import { FooterComponent } from './component/footer/footer.component';
import { AppRoutingModule } from './app-routing.module';
import { DetailModule } from './component/detail/detail.module';
import { HomeComponent } from './component/home/home.component';


@NgModule({
  declarations: [
    AppComponent,
    HeaderComponent,
    FooterComponent,
    HomeComponent
  ],
  imports: [
    BrowserModule,
    AppRoutingModule
  ],
  providers: [],
  bootstrap: [AppComponent]
})
export class AppModule {}

我已经将其报告为 Angular-cli 问题。你可以找到它here

有没有人遇到过同样的问题并找到了解决方案?

相关错误: Angular 5 with Angular cli non-lazy loading modules in the router (尚未解决)。

建议的解决方案: https://github.com/gdi2290/angular-starter/issues/1936:

{ path: 'listes', loadChildren: () => ListModule }
// it doesn't do lazy loading

重要信息:

Angular cli: 1.7.0
Angular: 5.2.0

我的问候

【问题讨论】:

    标签: angular angular-cli lazy-loading


    【解决方案1】:

    我遇到了同样的问题。我解决它只需停止 cli 服务器并启动它。如果您正确完成代码,错误就消失了。

    【讨论】:

    • 帮助了我。在 CLI 服务器运行时,我向延迟加载的模块添加了依赖项(错误地)。服务器重新启动后,错误发生了变化,结果发现缺少服务注入器。
    • 第一次不相信你的回答,但它就像一个魅力......非常感谢
    • 这也为我修复了它... derp。
    【解决方案2】:

    我使用您发布的 GitHub 代码克隆并重现了该问题。为了修复,你的 @angular/cli global 和 devDependencies 包必须是 1.7.2

    npm remove -g @angular/cli
    npm install -g @angular/cli@1.7.2
    npm remove @angular/cli
    npm add @angular/cli@1.7.2 --save-dev
    

    现在,您的 devDependencies 中的 @angular/cli 包与全局版本匹配,并且设置为 1.7.2,该问题已解决。

    【讨论】:

    • 谢谢,我之前遇到过这个问题,效果很好,一周后我又遇到了!这正常吗?
    【解决方案3】:

    我遇到了同样的问题。使用解决它

     {path:'listes' ,loadChildren: ()=>ListModule} not {path:'listes' ,loadChildren: 'app/component/list/list.module#ListModule'}
    

    【讨论】:

    • 我认为 ListModule 不会再被延迟加载,因为在执行 ()=&gt;ListModule 时,您必须 touch 类,这样模块才会被急切加载。请确认,谢谢。
    【解决方案4】:

    angular-cli 1.7.x 上有一个开放的错误:https://github.com/angular/angular-cli/issues/9488#issuecomment-368871510

    降级到 1.6.8 为我解决问题。

    【讨论】:

      【解决方案5】:

      请查看有关 1.7.x 错误的评论。问题似乎是将延迟加载的模块导入 AppModule。删除该导入为我解决了这个问题:https://github.com/angular/angular-cli/issues/9488#issuecomment-374037802

      【讨论】:

        【解决方案6】:

        对我而言,问题在于在 AppModule 中的 AppRoutingModule 之后导入 ChildModule。重新排序解决了我的问题。

        【讨论】:

        • 谢谢!它真的很有帮助,AppRoutingModule 应该是导入数组中的最后一个。
        【解决方案7】:

        在我看来,问题在于您可能会在同一路由文件中的同一路由上延迟加载多个模块。我也遇到了类似的问题并更改了其中一条路线的名称

        【讨论】:

          【解决方案8】:

          我遇到了同样的问题,并通过将延迟加载的模块添加到我的 Angular CLI 配置文件 (angular.json) 来解决它。 在这里查看我的答案: Angular 5 lazy loading Error: Cannot find module

          【讨论】:

            【解决方案9】:

            在您的 app.module.ts 中,您是否导入了 ListModule ?

            我遇到了同样的问题,并且能够通过从 app.module.ts 中的导入中删除延迟加载的模块来修复它

            【讨论】:

            • 我想要的是延迟加载。如果不是懒加载,那就完美了
            • 是的,这就是为什么我要求您从 app.module.ts 中删除 ListModule 如果您导入它。不知道为什么你错过了我的回答
            • 我从不将 ListModule 导入 app.module.ts
            猜你喜欢
            • 1970-01-01
            • 2011-05-20
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2023-01-29
            • 1970-01-01
            相关资源
            最近更新 更多