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

时间:2016-08-21 09:43:16

标签: aurelia systemjs jspm aurelia-navigation

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

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

我能够在本地重现此错误。 假设您拥有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将在[p]ages/welcome内寻找app-build.js模块。

我的建议是尽可能使用小写文件夹/文件名。