我试图以生产模式(devMode:production)构建我的Aurelia应用程序。构建成功,但是通过打开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类中,我将创建一个将在bay视图中绑定的剖视图模型数组:
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
答案 0 :(得分:2)
您遇到的问题是Webpack的调试和生产版本之间的行为不同。对于在开发过程中使用的调试版本,所有模块均保持原样,这意味着您的html模块可以访问,因此可以正常工作。对于生产构建,开始进行各种优化,其中之一是模块级联。因此,不再保留模块的原点(或这些模块的路径),因此您不会获得视图模型的原点,因为它使用视图模型原点来查找视图网址,因此无法找到视图。
您可以做的是用useView
装饰视图模型:
@useView(PLATFORM.moduleName('path/to/my-view'))
export class bay {
}
现在class bay
,即使使用模块串联,仍将具有有关其视图应在何处的信息。
答案 1 :(得分:0)
仅通过查看bay.ts中的代码,它看起来就像句子
this._sectionList.forEach(...)
应改为
_sectionList.forEach(...)
希望这会有所帮助。