Сборка AoT удаляет константы из объявления модуля - PullRequest
0 голосов
/ 05 декабря 2018

В проекте, над которым я работаю, мы храним все 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 для определения состояния не определено.

Вот эксперименты, которые я провел, чтобы выяснить, что происходит:

  1. приложение работает, как и ожидалось, если URL-адреса находятся в одном проекте (перемещение файла из отдельного пакета в проект внешнего интерфейса)
  2. Приложение работает, как и ожидалось, если URL-адреса экспортируются с export const URLS = {...} вместо module.exports-> Понятия не имею почему, но я не могу использовать это, поскольку синтаксис export не поддерживается узлом.
  3. После переписывания пакета в машинописный текст и импорта скомпилированной версии (.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)?

Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...