【问题标题】:Aurelia bundling components from plugins with external dependenciesAurelia 从具有外部依赖项的插件中捆绑组件
【发布时间】:2017-07-01 06:59:14
【问题描述】:

我很难使用 Aurelia 捆绑一个用 typescript 编写的自定义插件。它似乎总是从 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 中的包含在 vendor-bundle 下看起来像这样:

{ “名称”:“山姆-奥里利亚”, “路径”:“../node_modules/sam-aurelia/src”, “主”:“索引” }

所以我的问题是: 有谁知道是什么导致这些组件来自插件时无法加载?

额外问题:

  • 如何调试此类问题?
  • 为什么我的组件是从 node_modules 中获取的,而没有捆绑在 vendor-bundle 中?
  • 是否有一种简单的方法可以在开发过程中禁用捆绑以加快“编译”时间并简化调试?

谢谢!

编辑解释我的解决方案

抱歉,我还没有捆绑禁用或加载调试的解决方案。如下面的答案所述,在我的捆绑包配置(在 aurelia.json 中)中将“存根”选项设置为“真”会阻止捆绑 html/css 文件。而且似乎添加 glob 来加载这些文件也有帮助。 第二个问题来自我没有导出插件索引中的某些组件这一事实。当我为这些组件添加导出时,html 文件被正确捆绑。 最后,与这些包含外部插件的最后文件相关。我注意到浏览器试图从 node_modules/plugin/src/index.html 加载他们的 html 模板。我想这是因为它们是通过索引文件公开的,所以 aurelia 试图获取与索引相关的模板。将这些文件添加到 globalresources 解决了这个问题(虽然我不确定为什么)。

我现在可以开始了,虽然我可能会花一些时间将我的代码放在单独的模块中,看看是否真的需要将组件添加到 globalresources...

【问题讨论】:

    标签: plugins module bundle aurelia


    【解决方案1】:

    需要导出任何全局资源以进行跟踪(空状态和工具栏)。 如果你有非 js 文件,你需要将它们添加到 aurelia.json 中的资源数组中:

    {
        "name": "sam-aurelia",
        "path": "../node_modules/sam-aurelia/src",
        "main": "index",
        "resources": ["**/*.{html,css}"]
    }
    

    还有:

    "stub": false
    

    【讨论】:

    • 谢谢拉巴。 “存根”选项有什么用?现在看来我的 html 文件已正确捆绑,但 js 文件仍在从 node_modules 中获取。此外,我仍然有一个 html 文件在获取时会引发 404 错误,因为它试图获取一个名为“/node_modules/plugin/src/index.html”的文件,而不是“src/ui/dialog-box.html”下的文件...
    • 设置 stub 为 true 不包含文本插件,因此无法加载动态文本文件。
    • 谢谢拉巴。我编辑了我的问题以解释我为完全解决问题所经历的步骤,但你的回答让我走上了正轨......
    猜你喜欢
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多