为什么视图不是在 Aurelia 生产构建模式下创建的
Why are the views not created in Aurelia production build mode
我试图在生产模式下构建我的 Aurelia 应用程序 (devMode:production)。构建成功但是当 运行 打开 index.html 时我得到错误 "Cannot determine default view strategy for object."
应用程序在开发模式下构建它时工作得很好,运行 它在本地通过打开 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>
并且在海湾中 class 我正在创建一组将在海湾视图中界定的剖面视图模型:
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
只要看一下bay.ts中的代码,它看起来像句子
this._sectionList.forEach(...)
应该改为
_sectionList.forEach(...)
希望对您有所帮助。
您遇到的问题是使用 Webpack 的调试和生产构建之间的不同行为。对于您在开发过程中使用的调试构建,所有模块都保持原样,这意味着您的 html 模块可以访问,因此可以正常工作。对于生产构建,各种优化开始,其中之一是模块连接。因此,不再保留模块的来源(或这些模块的路径),因此您无法获得视图模型的来源,因此无法找到您的视图,因为它使用视图模型来源来查找视图 url .
你可以做的是用useView
装饰你的视图模型:
@useView(PLATFORM.moduleName('path/to/my-view'))
export class bay {
}
现在 class bay
,即使使用模块串联,仍将有关于其视图应位于何处的信息。
我试图在生产模式下构建我的 Aurelia 应用程序 (devMode:production)。构建成功但是当 运行 打开 index.html 时我得到错误 "Cannot determine default view strategy for object."
应用程序在开发模式下构建它时工作得很好,运行 它在本地通过打开 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>
并且在海湾中 class 我正在创建一组将在海湾视图中界定的剖面视图模型:
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
只要看一下bay.ts中的代码,它看起来像句子
this._sectionList.forEach(...)
应该改为
_sectionList.forEach(...)
希望对您有所帮助。
您遇到的问题是使用 Webpack 的调试和生产构建之间的不同行为。对于您在开发过程中使用的调试构建,所有模块都保持原样,这意味着您的 html 模块可以访问,因此可以正常工作。对于生产构建,各种优化开始,其中之一是模块连接。因此,不再保留模块的来源(或这些模块的路径),因此您无法获得视图模型的来源,因此无法找到您的视图,因为它使用视图模型来源来查找视图 url .
你可以做的是用useView
装饰你的视图模型:
@useView(PLATFORM.moduleName('path/to/my-view'))
export class bay {
}
现在 class bay
,即使使用模块串联,仍将有关于其视图应位于何处的信息。