我有一个带有子模块的主模块,最初我想让这些模块快速加载,所以我做了什么:
第一次尝试 - 渴望加载
import {DashboardModule} from './module/dashboard/dashboard.module';
export const _dashboardModule = () => DashboardModule;
export const routes: Routes = [
{
path: '',
children: [
{
path: 'dashboard',
loadChildren: _dashboardModule
}
]
}
];
在我开始使用 aot 编译构建 prod build 之前,它对我来说工作得很好。在那一刻,我遇到了这里提到的问题:https ://github.com/angular/angular-cli/issues/4192
第二次尝试 - 延迟加载
根据我上面链接的票,我开始为模块使用字符串路径,例如
loadChildren: './path/to/module/dashboard.module#DashboardModule'
它为每个模块生成单独的包。对于构建,我使用了 angular-cli 命令
ng build --output-path=../my/ouput/path --prod --aot --output-hashing none --vendor-chunk
因为我的应用程序是我无法使用生成的巨大现有应用程序的一部分,index.html
但我使用.ftl
了我指定的所有脚本应该从哪里加载的文件,如下所示:
<body>
<my-app></my-app>
<script src="<@versionedUri src="${base}/path/to/file/runtime.js"/>"></script>
<script src="<@versionedUri src="${base}/path/to/file/polyfills.js"/>"></script>
<script src="<@versionedUri src="${base}/path/to/file/styles.js"/>"></script>
<script src="<@versionedUri src="${base}/path/to/file/vendor.js"/>"></script>
<script src="<@versionedUri src="${base}/path/to/file/main.js"/>"></script>
</body>
如果您尝试延迟加载,这是一个问题,因为我的构建的输出文件位于不同的文件夹中,那么我.ftl
使用的文件而不是index.html
问题是,当您在浏览器中打开应用程序时,它会尝试从所在的同一文件夹加载块.ftl
并且它们那里不存在。
我的问题是:
- 有没有办法指定块文件的路径?
- 或者是否有其他方法可以在不导入子路由的情况下预加载模块并使用它们:
children: dashboardRoutes