RequireJS - 拥有两种加载方式的自有模块

时间:2014-08-14 06:54:31

标签: javascript requirejs amd

我正在尝试创建一个可以异步加载(AMD)并通过HTML脚本标记加载的模块。我将这个结构添加到我的模块中(我从jQuery源代码中获取):

if ( typeof define === "function" && define.amd ) { 
    define( "mymodule", ['googlemaps'], function(google) {
       return myModule; 
    }); 
}

myModule = function() {
    // here code uses "google" 
}

我的模块依赖于Google Maps API,所以如果我通过HTML脚本标记加载我的模块就可以了。但是如果我的模块加载了异步变量“google”,只能在“define”块中使用。有没有办法将此变量传递给全局范围(对于我的模块文件)?

2 个答案:

答案 0 :(得分:1)

您可以声明全局变量GoogleAPI并将define中的值附加到它

var GoogleAPI;
define( "mymodule", ['googlemaps'], function(google) {
    GoogleAPI = google;
    return myModule; 
});

答案 1 :(得分:1)

(function(global, factory) {
  if (typeof define === 'function' && define.amd) { // requirejs
    return define(['googlemaps'], factory);
  } else if (typeof exports === 'object') {    // nodejs
    return module.exports = factory(require('googlemaps'));
  } else {  // html
    return global['Odysseus'] = factory(global['googlemaps']);
  }
})(this, function(GoogleAPI) {
    ...
    return myModule; 
});