Almond.js and define() method. Throws: Uncaught Error: incorrect module build, no module name

Almond.js and define() method. Throws: Uncaught Error: incorrect module build, no module name

在我们公司,我们正在慢慢尝试调整我们庞大的应用程序以使用动态 AMD 模块加载器。我们不能一次完成,这就是我们分步进行的原因:首先,我们希望使用 AMD 要求将所有 javascript 重写为打字稿,并使用 almond.js 将 'fake' 模块化。重写所有内容后,我们将切换到真正的动态模块加载器。

当我们在页面上包含杏仁时,抛出以下错误:

almond.js:414 Uncaught Error: See almond README: incorrect module build, no module name
    at define (almond.js:414)
    at plotly.js:7
    at plotly.js:7

它来自多个库,而不仅仅是情节。我设法找到它,结果发现 almond 引入了 define(),它需要 3 个必需的参数,而 plotly(和其他一些库)使用其中的一个或两个参数调用 define():

剧情:

if (typeof define==="function" && define.amd ) {
  define([],f)
}

杏仁:

define = function (name, deps, callback) {
    if (typeof name !== 'string') {
        throw new Error('See almond README: incorrect module build, no module name');
    }
    (...)

你知道如何解决这个问题吗?我们可以在 Plotly.js 之后加载 almond.js,但我们希望找到更好的解决方案并将 Plotly 与 almond 结合使用。这可能吗?

正如 Almond 的自述文件所述:

Only useful for built/bundled AMD modules, does not do dynamic loading.

添加了重点。 define 没有字符串的形式将模块名称作为第一个参数用于尚未通过构建或捆绑过程的文件中。 AMD 捆绑器将调用 define 并将模块名称添加为捆绑时的第一个参数。您引用的文件未包含在包中,因此它们缺少模块名称。

解决方案:使用 AMD 捆绑器,例如 r.js 将您的模块捆绑到 Almond 将使用的单个捆绑包中。