Almond.js和define()方法。抛出:未捕获错误:模块构建不正确,没有模块名称

时间:2017-07-20 15:16:00

标签: requirejs plotly amd js-amd almond

  • 故事是:

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

  • 问题出现了

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

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

它来自几个图书馆,而不仅仅是情节。我设法跟踪它,结果发现杏仁引入define()需要3个必需参数,而plotly(和其他一些库)使用其中一个或两个调用define():

Plotly:

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与杏仁一起使用。这甚至可能吗?

1 个答案:

答案 0 :(得分:0)

正如Almond的自述文件所述:

  

仅对内置/捆绑 AMD模块有用,不进行动态加载。

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

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