Angular 6 - указать путь для лениво загруженных фрагментов

У меня есть основной модуль с подмодулями, изначально я хотел, чтобы эти модули были загружены, поэтому я сделал:

Попытка 1 – быстрая загрузка

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

У меня это работало нормально, пока я не начал собирать сборку продукта с компиляцией aot. В этот момент я сталкиваюсь с проблемой, которая упоминается здесь: https://github.com/angular/angular-cli/issues/4192

2-я попытка – отложенная загрузка

Основываясь на билете, который я связал выше, я начинаю использовать строковые пути для модулей, например.

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

person Andurit    schedule 05.06.2018    source источник
comment
Когда вы используете ленивую загрузку, важно не импортировать загруженный модуль, лучше загружать дочерние элементы через строку пути   -  person Antonio de la mata    schedule 05.06.2018


Ответы (2)


Путь, по которому создаются отложенные фрагменты (и все остальные .js скрипты), указан в файле angular.json, @ (projects: ‹projectName>: architect: options:) outputPath: ‹ваш-выходной-путь> ...

У меня самого возникли проблемы с тем, чтобы заставить приложение Angular искать фрагмент в этом месте, кажется, оно ищет его в корне (baseUrl).

Я нахожусь в ситуации, аналогичной OP, встроил приложение Angular в приложение .NET MVC5, поэтому вместо использования сгенерированного Angular index.html файл, «обслуживающий» приложение, представляет собой представление MVC Home/Index. Мой файл Index.cshtml очень похож на файл .ftl OP... моя проблема заключается в том, как сказать приложению Angular искать фрагмент в расположении outputPath?

person jwdvorak    schedule 31.08.2018
comment
Я также столкнулся с той же проблемой. Удалось узнать решение? - person Hemant Jain; 14.11.2018
comment
Добавление deployUrl в файл angular.json решило проблему. - person Hemant Jain; 14.11.2018

У меня похожая ситуация, и мне помогло добавление URL-адреса развертывания в мой angular.json. Комментарий Hermant Jain помог. Я просто добавляю этот ответ, чтобы указать, куда добавить этот параметр в angular.json.

Следуйте по этому пути в angular.json:

Проекты -> Ваш проект -> Архитектор -> Сборка -> Параметры-> deployUrl

Наоборот, без указания этого, это передать это как параметр следующим образом:

    ng build --watch --deploy-url /dist/

Таким образом, мои фрагменты загружаются из myWeb/dist/

person Zonaib    schedule 24.04.2019