不在RequireJS环境中时全局展示AMD模块

时间:2015-10-18 16:34:51

标签: javascript browser requirejs amd

我正在尝试转换经典的JavaScript" class"进入AMD模块。但是,我还需要继续将类导出到全局命名空间,因为一些遗留代码需要它。我已经尝试了this,但是没有创建全局对象。我做错了什么?

define('VisitorManager', function () {

    var VisitorManager = function () {

        "use strict";

        // ...
    };


    VisitorManager.prototype.hasExistingChat = function () {
        // ...
    };


    //expose globally
    this.VisitorManager = VisitorManager;

    //return AMD module
    return VisitorManager;

});

1 个答案:

答案 0 :(得分:3)

要全局公开您的模块,您需要在全局对象中注册它。

在浏览器中,全局对象为window

window.VisitorManager = VisitorManager;

在Node.js环境中,全局对象称为GLOBAL

GLOBAL.VisitorManager = VisitorManager;

要在旧版环境和RequireJS中使用该类,您可以使用此技巧:

(function() {

    var module = function() {

        var VisitorManager = function() {
            "use strict";

            // ...
        };

        // Return the class as an AMD module.
        return VisitorManager;
    };

    if (typeof define === "function" && typeof require === "function") {
        // If we are in a RequireJS environment, register the module.
        define('VisitorManager', module);
    } else {
        // Otherwise, register it globally.
        // This registers the class itself:
        window.VisitorManager = module();

        // If you want to great a global *instance* of the class, use this:
        // window.VisitorManager = new (module())();
    }

})();