【发布时间】:2018-11-15 02:22:25
【问题描述】:
我有一个带有子模块的主模块,最初我想让这些模块快速加载,所以我做了什么:
第一次尝试 - 渴望加载
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
【问题讨论】:
-
当你使用延迟加载时,重要的是不要导入加载的模块,它更好地通过路径字符串加载子项
标签: angular angular-cli nrwl