webpack - webpack 中的模块 ID 不一致
问题描述
我刚刚将 Aurelia 应用程序从 SystemJS 切换到 Webpack。我收到一个错误,抱怨加载程序找不到的 moduleId。深入研究后,我发现 Webpack 以不一致的方式生成 ID。虽然通常 moduleId 的外观并不重要,但这里的错误是由 Aurelia 期望 View (HTML) 和 ViewModel (JS) 的 ID 匹配引起的。通常,如果您正确命名它们,它们会这样做。但是,出于某种原因,在这个项目中,Webpack 会为某些 View/ViewModel 组合生成不一致的 moduleId。例如我得到
contacts/persons/person-details and contacts/persons/person-details.html
分别用于 JS 和 HTML,这就是它应该的样子。但是对于一个基本相同的模块,我得到
hriS and contacts/companies/company-details.html
或使用moduleIds: 'named'
(注意前导./src/
和尾随.js
):
./src/contacts/companies/company-details.js and contacts/companies/company-details.html
为什么我会得到不一致的 ID?我不知道这是否是Aurelia loader plugin的 Webpack 本身的问题。
解决方法:您可以使用 Aurelia 强制模块 ID 使用PLATFORM.moduleName()
. 因此,对于使用 Dialogs 而不是直接使用 ViewModel 的示例,您可以执行以下操作:
this.dialogService.open({ viewModel: PLATFORM.moduleName('contacts/companies/company-detail') });
解决方案
PLATFORM.moduleName 不是可选的解决方法,而是要求。如果您查看 aurelia 指南 ( http://aurelia.io/docs/build-systems/webpack/a-basic-example#platformmodulename ) 中的 webpack 部分,您会看到:
From your application's perspective, there is also one important detail:
each module reference must be wrapped in PLATFORM.moduleName(...).
This allows aurelia-loader-webpack to translate Aurelia's conventions
to something Webpack understands.
希望这能回答你的问题。
此致。
推荐阅读
- php - WordPress WP_User_Query
- java - 同时处理来自单个队列的两个或多个相同的 JMS 消息
- visual-studio - 如何快速清除 Visual Studio 2019 中的数千个 CS0234 错误
- windows - 用于删除 .zip 扩展名的批处理脚本
- ios - 当我尝试在它前面显示一个 uiview 时,tableview 向我发送了一个错误
- javascript - 为什么我们需要在 Redux reducer 中更新状态之前传播状态?
- r - 有条件地插入一组先前日期的行数
- javascript - 如何在django中出现代码标签的任何地方添加复制按钮
- android - 无法解决:org.jetbrains.kotlin:kotlin-stdlib
- git - 在合并我的拉取请求之前,我可以将更新从发布分支拉到我的功能分支吗?