Aurelia 从具有外部依赖性的插件中捆绑组件
Aurelia bundling components from plugins with external dependencies
我很难捆绑使用 Aurelia 以打字稿编写的自定义插件。它似乎总是从 node_modules 获取 类。如果它有效,我可以接受,但后来我意识到,所有使用外部库的组件都根本不会加载。
例如,我有一个使用 aurelia-dialog 的对话框组件,它永远不会被加载,即使在我将它从我的 /src 文件夹移动到外部插件之前该组件运行良好,我也没有在控制台上收到任何错误或任何内容.
供参考,typescript编译生成的index.js如下所示:
define(["require", "exports", "./ui/dialog-box", "./ui/message-box", "./attributes/active"], function (require, exports, dialog_box_1, message_box_1, active_1) {
"use strict";
exports.DialogBox = dialog_box_1.DialogBox;
exports.MessageBox = message_box_1.MessageBox;
exports.ActiveCustomAttribute = active_1.ActiveCustomAttribute;
function configure(config) {
config.globalResources(['./ui/empty-state', './ui/tool-bar']);
}
exports.configure = configure;
});
//# sourceMappingURL=index.js.map
我的 aurelia.json 供应商捆绑包下的包含如下所示:
{
"name": "sam-aurelia",
"path": "../node_modules/sam-aurelia/src",
"main": "index"
}
所以我的问题是:
有谁知道什么会导致这些组件在来自插件时无法加载?
奖金问题:
- 如何调试这类问题?
- 为什么我的组件是从 node_modules 获取的并且没有捆绑在 vendor-bundle 中?
- 是否有一种简单的方法可以在开发过程中禁用捆绑以加快 'compilation' 时间并简化调试?
谢谢!
编辑以解释我的解决方案
抱歉,我还没有捆绑禁用或加载调试的解决方案。如下面的答案所述,在我的包的配置中(在 aurelia.json 中)将 'stub' 选项设置为 'true' 阻止了 html/css 文件的捆绑。而且似乎添加 glob 来加载这些文件也有帮助。
第二个问题是我没有导出插件索引中的某些组件。当我为这些组件添加导出时,html 文件被正确捆绑。
最后,与这些包含外部插件的文件相关。我注意到浏览器试图从 node_modules/plugin/src/index.html 加载他们的 html 模板。我想这是因为它们是通过索引文件公开的,所以 aurelia 试图让它们的模板与索引相关。将这些文件添加到 globalresources 解决了这个问题(虽然我不确定为什么)。
我现在很高兴,尽管我可能会花一些时间将我的代码放在单独的模块中,看看是否真的有必要将组件添加到 globalresources...
需要导出任何全局资源以进行跟踪,(empty-state 和 tool-bar)。
如果您有非 js 文件,则需要将它们添加到 aurelia.json:
中的资源数组
{
"name": "sam-aurelia",
"path": "../node_modules/sam-aurelia/src",
"main": "index",
"resources": ["**/*.{html,css}"]
}
还有:
"stub": false
我很难捆绑使用 Aurelia 以打字稿编写的自定义插件。它似乎总是从 node_modules 获取 类。如果它有效,我可以接受,但后来我意识到,所有使用外部库的组件都根本不会加载。 例如,我有一个使用 aurelia-dialog 的对话框组件,它永远不会被加载,即使在我将它从我的 /src 文件夹移动到外部插件之前该组件运行良好,我也没有在控制台上收到任何错误或任何内容.
供参考,typescript编译生成的index.js如下所示:
define(["require", "exports", "./ui/dialog-box", "./ui/message-box", "./attributes/active"], function (require, exports, dialog_box_1, message_box_1, active_1) {
"use strict";
exports.DialogBox = dialog_box_1.DialogBox;
exports.MessageBox = message_box_1.MessageBox;
exports.ActiveCustomAttribute = active_1.ActiveCustomAttribute;
function configure(config) {
config.globalResources(['./ui/empty-state', './ui/tool-bar']);
}
exports.configure = configure;
});
//# sourceMappingURL=index.js.map
我的 aurelia.json 供应商捆绑包下的包含如下所示:
{ "name": "sam-aurelia", "path": "../node_modules/sam-aurelia/src", "main": "index" }
所以我的问题是: 有谁知道什么会导致这些组件在来自插件时无法加载?
奖金问题:
- 如何调试这类问题?
- 为什么我的组件是从 node_modules 获取的并且没有捆绑在 vendor-bundle 中?
- 是否有一种简单的方法可以在开发过程中禁用捆绑以加快 'compilation' 时间并简化调试?
谢谢!
编辑以解释我的解决方案
抱歉,我还没有捆绑禁用或加载调试的解决方案。如下面的答案所述,在我的包的配置中(在 aurelia.json 中)将 'stub' 选项设置为 'true' 阻止了 html/css 文件的捆绑。而且似乎添加 glob 来加载这些文件也有帮助。 第二个问题是我没有导出插件索引中的某些组件。当我为这些组件添加导出时,html 文件被正确捆绑。 最后,与这些包含外部插件的文件相关。我注意到浏览器试图从 node_modules/plugin/src/index.html 加载他们的 html 模板。我想这是因为它们是通过索引文件公开的,所以 aurelia 试图让它们的模板与索引相关。将这些文件添加到 globalresources 解决了这个问题(虽然我不确定为什么)。
我现在很高兴,尽管我可能会花一些时间将我的代码放在单独的模块中,看看是否真的有必要将组件添加到 globalresources...
需要导出任何全局资源以进行跟踪,(empty-state 和 tool-bar)。 如果您有非 js 文件,则需要将它们添加到 aurelia.json:
中的资源数组{
"name": "sam-aurelia",
"path": "../node_modules/sam-aurelia/src",
"main": "index",
"resources": ["**/*.{html,css}"]
}
还有:
"stub": false