多个 Aurelia 实例 - Aurelia Webpack 插件 - aureliaApp 选项 - "module not found"

Multiple Aurelia Instances - Aurelia Webpack Plugin - aureliaApp option - "module not found"

我正在将我的 Web 应用程序组合成多个 Aurelia "feature" 应用程序 - 虽然我没有使用 Aurelia 功能本身。因此,在我的 html 标记中,我有两个指向不同应用程序的入口点:

<!-- Top Navigation Bar --> 
<div aurelia-app="topnav"></div>

<!-- Main App--> 
<div aurelia-app="main"></div>

我正在使用 webpack,并且使用单个 "main" 应用程序一切正常。 Webpack 生成一个 JS 文件 "main.bundle.js",我将其包含在 src 标签中。

当我添加 "topnav" 应用程序时,事情并没有那么简单。在 webpack 中,我告诉插件使用不同的 aureliaApp 名称:

 new AureliaPlugin({ aureliaApp: "topnav"}),

而且,如您所见,我的 HTML 入口点也调用了 "topnav"。 Webpack 生成一个 JS 文件 "topnav.bundle.js",我也将其包含在内。我有一个名为 "topnav.ts" 的文件,其中包含结束于:

的 aurelia Cionfigure 函数
     aurelia.start().then(() => aurelia.setRoot(PLATFORM.moduleName("nav")));

还有一对文件 "nav.ts"、"nav.html" 构成了我的视图模型和视图。

当我 运行 应用 aurelia 加载并执行 "nav" 模块代码时。但我随后收到一个错误 - 见下文。

它报告找不到的模块是输入到 HTML 标记中的模块。

这应该行得通吗?我错过了什么吗?

我应该补充一点,似乎一切正常。我可以在视图模型中创建和更新属性,这些属性绑定到视图。只是抛出这个错误。

你没有做错任何事,只是场景不受支持。根据官方文档维基:https://github.com/aurelia/webpack-plugin/wiki/AureliaPlugin-options#aureliaapp

您只能有 1 个具有 aureliaApp 配置的自动输入模块。要解决这个问题,您只需将 PLATFORM.moduleName('topnav') 添加到您的 main.ts (并将其放在根级别)

另一种方法是手动bootstrap:

// in your index.ts
import { bootstrap } from 'aurelia-bootstrapper';

// bootstrap top nav application, with one instance of Aurelia
bootstrap(aurelia => {
  // do your configuration
  aurelia
    .start()
    .then(() => aurelia.setRoot(
      PLATFORM.moduleName('topnav'),
      document.querySelector('#topnav')
    );
});

// bootstrap main application, with another instance of Aurelia
bootstrap(aurelia => {
  // aurelia.use.standardConfiguration();
  // ...
  aurelia
    .start()
    .then(() => aurelia.setRoot(
      PLATFORM.moduleName('app'),
      document.querySelector('app')
    )
});