sma*_*use 8 lazy-loading gulp systemjs systemjs-builder angular
我正在使用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' }
]
}
];
Run Code Online (Sandbox Code Playgroud)
我使用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 });
});
Run Code Online (Sandbox Code Playgroud)
但是......如果我尝试在构建包上运行服务器,那么当它试图运行延迟加载的模块时应用程序不起作用.它给了我以下错误:
GET http://127.0.0.1:8080/app/modules/FIRST-SECTION/first-section.module 404 (Not Found)
Run Code Online (Sandbox Code Playgroud)
这是我的systemjs.config.js档案:
(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);
Run Code Online (Sandbox Code Playgroud)
编辑:
如在带有静态包的SystemJs Builder站点上所述,我们不需要SystemJ来加载模块.实际上我正在创建一个静态包(buildStatic而不是bundle),但由于我排除了SystemJs,似乎没有其他方法来延迟加载模块.那么如何bundle使用延迟加载模块创建生产构建但没有SystemJS(systemjs.config.js文件dist夹中没有文件)?我看到WebPack可以做到......
看看是否可以通过提供所需模块的映射来安抚 system.js。所以当system.js找到路径时modules/FIRST-SECTION/first-section.module时,你可以告诉它:嘿,你能将此路径映射到modules/FIRST-SECTION/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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2342 次 |
| 最近记录: |