从 RequireJS 中的 CommonJS 样式模块导出构造函数

Export a constructor from a CommonJS style module in RequireJS

我正在尝试使用 CommonJS 样式模块中的 exports 对象导出构造函数。出于某种原因,要求模块会导致空对象被 returned 而不是导出的函数。

比如这个模块;

define(function(require, exports) {
    var Example = function() {
        this.example = true;
    };

    exports = Example;
});

在另一个模块中需要它并实例化时导致 Uncaught TypeError: object is not a function 错误。

define(function(require, exports) {
    var Example = require('example');
    var example = new Example();
});

但是,如果我将模块修改为 return 构造函数而不是使用 exports 对象,一切都会按预期工作。

define(function(require, exports) {
    var Example = function() {
        this.example = true;
    };

    return Example;
});

这附近有没有?

就像您在 Node.js 中所做的那样,您必须分配给 module.exports 而不是 exports 本身。所以:

define(function(require, exports, module) {
    var Example = function() {
        this.example = true;
    };

    module.exports = Example;
});

分配给 exports 无效,因为 exports 是函数的局部变量。函数之外的任何东西都无法知道您已分配给它。当您分配给 module.exports 时。这是另一回事,因为您正在修改 module 所指的 对象

RequireJS 文档 suggests 就像您在上一个片段中所做的那样:只是 return 您要分配给 module.exports 的值。