如果源模块位于子目录中,Aurelia 导出的包会导致来自 SystemJS 的 404

Aurelia exported bundle causes a 404 from SystemJS if a source module was in a subdirectory

我正在通过 TypeScript / ASP.NET 核心骨架导航应用程序学习 Aurelia。在默认状态下,一切 运行 都很好。为了测试导出的生产包,我 运行 Gulp 导出任务,然后通过 Visual Studio 项目发布应用程序发布到本地文件夹,然后用来自的 wwwroot 文件夹替换发布的 wwwroot 文件夹在 "export" 文件夹中,然后从命令行使用 dotnet 到 运行 应用程序。

如果我在子目录中有任何源模块,事情就会中断。例如,我将welcome.ts/html组件文件移动到“/src/Pages”中,并将其在app.ts中的路由moduleId相应地调整为“./pages/welcome”。然后,未捆绑的应用程序仍然 运行 正常运行,但是当我尝试导出版本时,我收到 SystemJS 向 http://localhost:5000/dist/pages/welcome.js 发出的 404 请求(如您所料)。

我可以在 app-build.js 文件中看到欢迎组件的内容,导出文件夹中的 config.js 文件包含预期的文件路径,即它有 "Pages/welcome...".

我读过这个看似相似的问题:

https://github.com/aurelia/bundler/issues/131

但是将 depCache 设置为 false 对我的情况没有影响。为什么 SystemJS 试图从包外部单独加载此模块?

我能够在本地重现此错误。 假设您有一个 Windows 环境,这将是一个 区分大小写的问题

[P]ages 文件夹重命名为 [p]ages 后,捆绑版本按预期工作。

在文件系统上有一个 [P]ages/welcome.js 视图模型,但 [p]ages/welcome 已被定义为 moduleId。

  • 非捆绑模式: Windows 文件系统不区分大小写,正确加载 [P]ages/welcome.js 可能会产生误导。
  • 捆绑模式:
    • 基于文件路径,捆绑过程嵌入[P]ages/welcome.js 作为[P]ages/welcome 模块。
    • 但是,根据路由配置,SystemJS 将在 app-build.js.
    • 中寻找 [p]ages/welcome 模块

我的建议是尽可能使用小写 folder/filenames。