У меня есть основной модуль с подмодулями, изначально я хотел сделать эти модули загруженными, поэтому я сделал:
1-я попытка - полная загрузка
import {DashboardModule} from './module/dashboard/dashboard.module';
export const _dashboardModule = () => DashboardModule;
export const routes: Routes = [
{
path: '',
children: [
{
path: 'dashboard',
loadChildren: _dashboardModule
}
]
}
];
У меня все работало нормально, пока я не начал собирать prod build без компиляции.В этот момент я сталкиваюсь с проблемой, которая упоминается здесь: 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