Почему представления не создаются в режиме производственной сборки Aurelia

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

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

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

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

приложение.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>

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

бухта.тс

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);
      });
    }
}

залив.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.


5
394
2

Ответы:

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

this._sectionList.forEach(...)

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

_sectionList.forEach(...)

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


Решено

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

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

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

}

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