如果我命名模块,则RequireJS依赖项未定义

如果我命名模块,则RequireJS依赖项未定义,requirejs,durandal,Requirejs,Durandal,我正在使用Durandal,我正在尝试将此模块用作另一个模块的依赖项: define('Beer', function () { return function Beer (name, brewery) { this.name = name; this.brewery = brewery; }; }); 在另一个模块中,我执行以下操作: define(['knockout', 'models/Beer'], function (ko, Beer)

我正在使用Durandal,我正在尝试将此模块用作另一个模块的依赖项:

define('Beer', function () {
    return function Beer (name, brewery) {
        this.name = name;
        this.brewery = brewery;
    };
});
在另一个模块中,我执行以下操作:

define(['knockout', 'models/Beer'], function (ko, Beer) {
    return {
        displayName: 'Add',
        name: ko.observable(),
        brewery: ko.observable(),
        save: function () {
            var beer = new Beer(this.name(), this.brewery());
            console.log(beer);
        }
    }
});
我的javascript被加载,因为我在路径中定义了它(并且我签入了Firebug)。但是我的第二个模块中的
Beer
参数未定义。我不知道为什么,因为我的啤酒模块确实返回了一些东西(它返回函数)。我还能看什么?我发现的大多数解决方案是(第一个)模块没有返回任何东西,但我的模块显然返回了任何东西

更新 显然,当我删除啤酒模块的名称时,它会起作用:

define(function() {
    return function Beer (name, brewery) {
        // ...
    }
});

虽然这看起来很有效,但对我来说却不行。有人能告诉我为什么吗?

在您的方法中,您将命名模块与匿名模块混合使用

如果将模块命名为“Beer”,则需要使用名称,而不是路径:

require(['Beer'], function (Beer) {
    var a = new Beer();
});
如果从Beer模块中删除该名称,则可以通过以下路径加载匿名模块:

require(['path/to/Beer'], function (Beer) {
    var a = new Beer();
}
编辑:您链接到的主题不使用RequireJS,尽管它看起来很相似