我的问题是关于别名自定义元素并在aurelia的html模板中使用它们 设置我使用最新的webpack打字稿框架https://github.com/aurelia/skeleton-navigation 这些是我的配置:
webpack.config.a.js
...
resolve: {
extensions: ['.ts', '.js'],
modules: [srcDir, 'node_modules'],
alias: {
"component-alias": path.resolve(__dirname, "./src/component-a")
}
},
...
app.html
<template>
<require from="component-alias/component"></require>
<require from="./nav-bar.html"></require>
<nav-bar router.bind="router"></nav-bar>
<div class="page-host">
<router-view></router-view>
</div>
<component></component>
</template>
文件结构:
src
|----component-a
| |----component.html
| |----component.ts
|
|----component-b
| |----component.html
| |----component.ts
|
|----app.html
|----app.ts
|
|...
|
webpack.config.a.js
webpack.config.b.js
根据不同的配置(webpack.config.a.js, webpack.config.b.js
),如果component-a或component-b是bundle的一部分,webpack应该在构建时决定。
使用configs编译configs但在运行时抛出异常:
Error: Unable to find module with ID: component-alias/component.html
是否可以在html-templates中实例化这些组件? 或者也许还有其他方法如何决定构建时使用哪个组件?
提前致谢
答案 0 :(得分:0)
我找到了解决问题的方法。
使用aurelia的内置compose
元素可以解决问题。
<强> app.html 强>
<template>
<require from="./nav-bar.html"></require>
<nav-bar router.bind="router"></nav-bar>
<div class="page-host">
<router-view></router-view>
</div>
<compose view-model.bind="componentPath"
view.bind="componentTemplatePath"></compose>
</template>
<强> app.ts 强>
import { PLATFORM } from "aurelia-pal";
...
public bind() {
this.componentPath = PLATFORM.moduleName("component-alias/component");
this.componentTemplatePath = PLATFORM.moduleName("component-alias/component.html");
}
我认为这不是最好的解决方案,但它是一个有效的解决方案。如果您有任何其他方法,请告诉我。
答案 1 :(得分:0)
我怀疑代码中某处PLATFORM.moduleName("component-alias/component.html")
就够了,不需要compose