Я пытаюсь собрать приложение 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.
просто взглянув на код в bay.ts, он выглядит как предложение
this._sectionList.forEach(...)
вместо этого должно быть
_sectionList.forEach(...)
Надеюсь это поможет.
Проблема, с которой вы столкнулись, связана с разным поведением между отладочными и производственными сборками с помощью Webpack. Для отладочной сборки, которую вы используете во время разработки, все модули остаются такими, какие они есть, что означает, что ваш html-модуль доступен и, следовательно, работает без каких-либо проблем. Для производственной сборки вступают в действие различные оптимизации, и одна из них — объединение модулей. Из-за этого источник модулей (или путь к этим модулям) больше не сохраняется, поэтому вы не получаете источник для своей модели представления, что делает невозможным поиск вашего представления, поскольку он использует источник модели представления для поиска URL-адреса представления.
Что вы можете сделать, так это украсить вашу модель представления useView
:
@useView(PLATFORM.moduleName('path/to/my-view'))
export class bay {
}
Теперь class bay
, даже при объединении модулей, все равно будет иметь информацию о том, где должно быть его представление.