В проекте, над которым я работаю, мы храним все URL-адреса в отдельном пакете npm, чтобы они были разделены между angular и узлом на внутренней стороне.
URL-адреса хранятся какпростой объект:
exports.URLS = {
'login': '/',
'portal': '/portal'
};
Вот модуль приложения с конфигурацией маршрутизатора:
@NgModule({
declarations: [
AppComponent,
RootComponent
],
imports: [
BrowserModule,
UIRouterModule.forRoot({
otherwise: '/',
states: [
{
name: 'root',
url: URLS['login'],
component: RootComponent
}
]
})
],
providers: [
{
provide: NgModuleFactoryLoader,
useClass: SystemJsNgModuleLoader
}
],
bootstrap: [AppComponent]
})
export class AppModule { }
Приложение работает нормально при сборке в режиме разработки (без aot), с aot все, что показывает эточерная страницаЭто происходит потому, что состояния, переданные в UIRouter, не имеют URL-адресов - поле url
для определения состояния не определено.
Вот эксперименты, которые я провел, чтобы выяснить, что происходит:
- приложение работает, как и ожидалось, если URL-адреса находятся в одном проекте (перемещение файла из отдельного пакета в проект внешнего интерфейса)
- Приложение работает, как и ожидалось, если URL-адреса экспортируются с
export const URLS = {...}
вместо module.exports
-> Понятия не имею почему, но я не могу использовать это, поскольку синтаксис export
не поддерживается узлом. - После переписывания пакета в машинописный текст и импорта скомпилированной версии (.js с .d.ts file Я получаю следующую ошибку:
Only initialized variables and constants can be referenced in decorators because the value of this variable is needed by the template compiler in 'URLS'
. При импорте исходных файлов .ts
приложение работает должным образом.
Есть ли способ сохранить файлы в отдельном проекте иAOT включать значения в скомпилированный код?
Мне также интересно узнать, почему это происходит (особенно во втором эксперименте - я не могу понять, почему он работает с export const
)?
Спасибо!