Angular2 延迟加载模块:如何使用 SystemJS Builder 创建构建包?

2023-12-27

我正在使用 Angular2 和 SystemJS 创建一个 Web 应用程序。 我的应用程序中有一些模块,在路由器配置中我使用延迟加载来打开它们。

这是我的应用程序的路由文件,它延迟加载两个模块:

const appRoutes: Routes = [
    { path: '', component: MainComponent,
        canActivate: [AuthGuard],
        children: [
            { path: 'dashboard', component: DashboardComponent },
            { path: 'first-section', loadChildren: 'app/modules/FIRST-SECTION/first-section.module' },
            { path: 'second-section', loadChildren: 'app/modules/SECOND-SECTION/second-section.module' },
            { path: 'documents', component: DocumentsComponent },
            { path: 'users', component: UsersComponent },
            { path: '', redirectTo: 'dashboard', pathMatch: 'full' }
        ]
    }
];

我使用 Gulp 为开发服务器和生产构建创建任务。 对于构建,我使用 SystemJS Builder 为整个应用程序创建缩小的 JS 文件。

gulp.task('app-bundle', function() {
    var builder = new Builder('src', 'src/systemjs.config.js');

    return builder.buildStatic('app/main.js', 'build/scripts/app.min.js', { minify: true });
});

但是...如果我尝试在构建包上运行服务器,则应用程序在尝试运行延迟加载的模块时将无法工作。 它给了我以下错误:

GET http://127.0.0.1:8080/app/modules/FIRST-SECTION/first-section.module 404 (Not Found)

这是我的systemjs.config.js file:

(function (global) {
    System.config({
        paths: {
            'npm:': './node_modules/',
        },
        map: {
            app: 'app',
            '@angular/core': 'npm:@angular/core/bundles/core.umd.js',
            '@angular/common': 'npm:@angular/common/bundles/common.umd.js',
            '@angular/compiler': 'npm:@angular/compiler/bundles/compiler.umd.js',
            '@angular/platform-browser': 'npm:@angular/platform-browser/bundles/platform-browser.umd.js',
            '@angular/platform-browser-dynamic': 'npm:@angular/platform-browser-dynamic/bundles/platform-browser-dynamic.umd.js',
            '@angular/http': 'npm:@angular/http/bundles/http.umd.js',
            '@angular/router': 'npm:@angular/router/bundles/router.umd.js',
            '@angular/forms': 'npm:@angular/forms/bundles/forms.umd.js',
            '@angular/upgrade': 'npm:@angular/upgrade/bundles/upgrade.umd.js',
            'rxjs': 'npm:rxjs',
            'lodash': 'npm:lodash/lodash.min.js',
            'jquery': 'npm:jquery/dist/jquery.min.js',
        },
        packages: {
            app: { main: './main.js', defaultExtension: 'js' },
            rxjs: { defaultExtension: 'js' },
        }
    });
})(this);

EDIT:

正如带有静态包的 SystemJs Builder 站点上所述,我们不需要 SystemJs 来加载模块。事实上,我正在创建一个静态包(带有buildStatic, 代替bundle),但由于我排除了 SystemJs,似乎没有其他方法可以延迟加载模块。 那么如何使用创建生产版本bundle然后使用延迟加载模块但不使用 SystemJS(不使用systemjs.config.js文件在dist文件夹)?我发现 WebPack 可以做到...


看看是否可以通过提供所需模块的映射来安抚 system.js。所以当system.js找到路径时模块/第一节/first-section.module,你告诉它:嘿,你能把这条路径映射到模块/第一节/first-section.module.js无需在控制台中尖叫。希望这可以帮助 。

(function (global) {
    System.config({
        paths: {
            'npm:': './node_modules/',
        },
        map: {
            app: 'app',
            'modules/FIRST-SECTION/first-section.module':'modules/FIRST-SECTION/first-section.module.js',
          .........................
          your other mappings here
          .........................
            'lodash': 'npm:lodash/lodash.min.js',
            'jquery': 'npm:jquery/dist/jquery.min.js',
        },
        packages: {
            app: { main: './main.js', defaultExtension: 'js' },
            rxjs: { defaultExtension: 'js' },
        }
    });
})(this);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Angular2 延迟加载模块:如何使用 SystemJS Builder 创建构建包? 的相关文章

随机推荐