Почему представления не создаются в режиме сборки производства Aurelia - PullRequest
3 голосов
/ 14 мая 2019

Я пытаюсь собрать свое приложение Aurelia в производственном режиме (devMode: production). Сборка прошла успешно, но при ее запуске, открыв index.html, я получаю сообщение об ошибке «Невозможно определить стратегию представления по умолчанию для объекта».

Приложение прекрасно работает, когда его собирают в режиме разработки и запускают локально, просто открыв index.html или выполнив "au run".

Приложение сгенерировано Aurelia-cli. Я безуспешно пытался отключить все настройки в webpack.config.js, которые установлены для производственного режима.

В моей основной модели представления приложения я создаю массив моделей представления, которые будут использоваться в представлении для создания подкомпонентов:

application.ts

...  
let newBayViewModel = new bay(sectionListLeftBay);
this._bayViewModels.push(newBayViewModel);

newBayViewModel = new bay(sectionListRightBay);
this._bayViewModels.push(newBayViewModel);
...

application.html

<div class="bay" repeat.for="bay of bayViewModels">
  <compose view-model.bind="bay"></compose>
</div>

И в классе отсеков я создаю массив моделей сечения, которые будут ограничены в виде отсека:

bay.ts

export class bay {
  private _sectionViewModels: section[] = [];
  public get sectionViewModels() : section[] {
    return this._sectionViewModels;
  }

  constructor(
    private _sectionList: string[]) {

      this._sectionList.forEach(sectionName => {
        let newSectionViewModel = new section(sectionName);
        this._sectionViewModels.push(newSectionViewModel);
      });
    }
}

bay.html

<template>
  <div class="section-header" repeat.for="section of sectionViewModels">
      <compose view-model.bind="section"></compose>
  </div>
</template>

Если я удаляю код в bay.ts, который создает модели сечения, ошибок не будет, поэтому проблема как-то связана с этой частью. В чем может быть проблема?

Я использую aurelia-cli 1.0.0-beta.15, webpack 4.31.0, aurelia-webpack-plugin 4.0.0

Ответы [ 2 ]

2 голосов
/ 16 мая 2019

Проблема, с которой вы столкнулись, связана с различным поведением отладочной и рабочей сборок с Webpack.Для отладочной сборки, которую вы используете во время разработки, все модули сохраняются такими, какие они есть, что означает, что ваш HTML-модуль доступен, и, следовательно, работает без каких-либо проблем.При сборке продукции включаются различные оптимизации, и одним из них является объединение модулей.Из-за этого происхождение модулей (или путь к этим модулям) больше не сохраняется, поэтому вы не получаете источник для вашей модели представления, что делает невозможным поиск вашего представления, поскольку он использует источник модели представления для поиска URL-адреса представления.

Что вы можете сделать, это украсить вашу модель представления с помощью useView:

@useView(PLATFORM.moduleName('path/to/my-view'))
export class bay {

}

Теперь class bay, даже с конкатенацией модуля, будет по-прежнему иметь информацию о том, где должно быть его представление.

0 голосов
/ 14 мая 2019

просто глядя на код в bay.ts, он выглядит как предложение

this._sectionList.forEach(...)

должно быть вместо

_sectionList.forEach(...)

Надеюсь, это поможет.

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