【问题标题】:Lazy loading with webpack angular2使用 webpack angular2 延迟加载
【发布时间】:2017-02-03 13:57:52
【问题描述】:

我正在使用 angular2 完整版,我正在尝试实现延迟加载。我的主要路线如下

export const ROUTES: Routes = [
    { path: 'login', component: LoginPage },
    { path: 'reset-password', component: Myaccount },
    {
        path: '',
        redirectTo: 'app',
        pathMatch: 'full'
    },
    ...ROUTES_APP,
    { path: "sub", loadChildren: "es6-promise?,[name]!./app/sub/sub.module#SubModule" },
];

我的子路由如下

import { Routes, RouterModule } from "@angular/router";
import { SubAppComponent } from "./sub-app.component";
import { SubHomeComponent } from "./sub-home.component";

export const subRoutes: Routes = [
  {
    path: "",
    component: SubAppComponent,
    children: [
      { path: "", component: SubHomeComponent }
    ]
  },
];

export const subRouting = RouterModule.forChild(subRoutes);

我的子模块如下

import { NgModule } from "@angular/core";
import { subRouting } from "./sub.routing";
import { SubAppComponent } from "./sub-app.component";
import { SubHomeComponent } from "./sub-home.component";

@NgModule({
  imports: [
    subRouting,
  ],
  declarations: [
    SubAppComponent,
    SubHomeComponent,
  ],
})
export class SubModule {
}

导航到 sub 时出现错误 但是我遇到了错误

core.umd.js:3462 例外:未捕获(承诺):TypeError:System.import 不是函数

请帮助我/让我知道如何使用 webpack 处理延迟加载

【问题讨论】:

  • 你的标题说的是 webpack,但是你的错误说你还在使用System.js。 Angular2 webpack 版本根本不使用 system.js。
  • 因此我感到很惊讶!!
  • 你在使用 angular-cli 吗?
  • 不,我没有使用 angular-cli

标签: angular webpack


【解决方案1】:

我已经通过使用 require 解决了上述问题

{ path: "sub", loadChildren: () => require("es6-promise!./app/sub/sub.module")("SubModule") }

【讨论】:

    【解决方案2】:

    试试 angular-router-loader

    按照步骤..

    npm install angular-router-loader --save-dev
    

    在您的路线中进行延迟加载

    import { Routes } from '@angular/router';
    
    export const routes: Routes = [
      { path: 'lazy', loadChildren: './lazy.module#LazyModule' }
    ];
    

    用于同步加载

    import { Routes } from '@angular/router';
    
    export const routes: Routes = [
      { path: 'lazy', loadChildren: './lazy.module#LazyModule?sync=true' }
    ];
    

    webpack.config.js

    test: /\.ts$/,
        loaders: [
          'awesome-typescript-loader',
          'angular-router-loader'
        ]
      }
    

    【讨论】:

    • 我收到异常:超出最大调用堆栈大小错误。 Subscriber.js:227 Uncaught RangeError: 超出最大调用堆栈大小
    • 再次删除所有 cmets 尝试同样的错误。如果你有任何github链接,请提供给我。
    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 2018-03-15
    • 2021-11-12
    • 2016-10-10
    • 2017-07-10
    相关资源
    最近更新 更多