Angular 6 - 指定延迟加载块的路径

And*_*rit 5 angular-cli angular nrwl

我有一个带有子模块的主模块,最初我想让这些模块预先加载,所以我做了什么:

第一次尝试 - 急切加载

import {DashboardModule} from './module/dashboard/dashboard.module';
export const _dashboardModule = () => DashboardModule;
export const routes: Routes = [
    {
        path: '',
        children: [
            {
                path: 'dashboard',
                loadChildren: _dashboardModule
            }
        ]
    }                
];
Run Code Online (Sandbox Code Playgroud)

在我开始使用 aot 编译构建 prod 之前,它对我来说很好用。在那一刻,我遇到了这里提到的问题:https : //github.com/angular/angular-cli/issues/4192

第二次尝试 - 延迟加载

根据我上面链接的票证,我开始使用模块的字符串路径,例如

loadChildren: './path/to/module/dashboard.module#DashboardModule'
Run Code Online (Sandbox Code Playgroud)

为每个模块生成单独的包。对于构建,我使用了 angular-cli 命令

ng build --output-path=../my/ouput/path --prod --aot --output-hashing none --vendor-chunk
Run Code Online (Sandbox Code Playgroud)

因为我的应用程序是庞大的现有应用程序的一部分,所以我不能使用生成的应用程序,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>
Run Code Online (Sandbox Code Playgroud)

如果您尝试延迟加载,这是一个问题,因为我的构建的输出文件位于不同的文件夹中,那么我.ftl使用的文件而不是index.html问题是,当您在浏览器中打开应用程序时,它尝试从所在的同一文件夹加载块,.ftl并且它们那里不存在。

我的问题是:

  • 有没有办法为块文件指定路径?
  • 或者是否有其他方法可以在不导入子路由的情况下预先加载模块并使用它们,例如: children: dashboardRoutes

jwd*_*rak 5

生成延迟加载块(和所有其他.js脚本)的路径在angular.json 文件中指定,@ (projects: < projectName >: Architect: options:) outputPath: < your-output-path > ...

我自己遇到了麻烦,让 Angular 应用程序在这个位置寻找块,它似乎在根(baseUrl)寻找它。

我的情况与 OP 类似,将 Angular 应用程序嵌入到 .NET MVC5 应用程序中,因此不是使用 Angular 生成的 index.html,而是“服务”应用程序的文件是 MVC Home/Index 视图。我的Index.cshtml文件看起来与 OP 的.ftl文件非常相似……我的困惑是如何告诉 Angular 应用程序在 outputPath 位置查找块?

  • 在 angular.json 文件中添加 deployUrl 解决了这个问题。 (5认同)

小智 5

我也有类似的情况,帮助的是将部署 url 添加到我的 angular.json 中。赫尔曼特·贾恩 (Hermant Jain) 的评论很有帮助。我只是添加这个答案来指定在 angular.json 中添加此设置的位置。

在 angular.json 中遵循以下路径:

项目 -> 您的项目 -> 架构师 -> 构建 -> 选项 -> deployUrl

另一种不指定的方法是将其作为参数传递,如下所示:

    ng build --watch --deploy-url /dist/
Run Code Online (Sandbox Code Playgroud)

这样,我的块就会从 myWeb/dist/ 加载