为什么没有在Aurelia生产构建模式中创建视图

时间:2019-05-14 08:32:14

标签: typescript webpack aurelia

我试图以生产模式(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

2 个答案:

答案 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(...)

希望这会有所帮助。