用AMD隐藏全局window.google.maps对象

Hide global window.google.maps object with AMD

本文关键字:google maps 对象 window 全局 AMD 隐藏      更新时间:2023-09-26

我使用的是AMD模块模式,到目前为止,隐藏全局对象相对简单:

define([], function(){
  /*jquery here */
  var tmp = $;
  $ = undefined;
  return tmp;
}

然而,我很好奇是否有可能与谷歌的全局对象做类似的事情(我猜他们真的很喜欢这些…map和它的大部分api都使用em)。

只是做我之前做过的事情实际上破坏了代码,因为。谷歌内部似乎是通过调用全局窗口来自我引用自己。对象从脚本,它加载在飞行。

我将继续调查,但我很好奇你们都是怎么想的!

谢谢。

如果你使用RequireJS作为你的AMD加载器,你可以使用config shims来包装非AMD模块,表达它们的依赖关系,执行任何必要的初始化(如果脚本支持的话,你可以清除它们的全局),并导出它们的全局。

对于Google Maps,它看起来像这样(不,你可能不想清除全局Google变量):

require.config({
    paths: {
        "maps": "https://maps.googleapis.com/maps/api/js?key=API_KEY"
    },
    shims: {
        "maps": {
            exports: "google.maps"
        }
    }
});

稍后,您可以将其用作常规AMD模块:

require(["maps"], function(maps) {
   var map = new maps.Map(document.getElementById("map-canvas"), ....);
   ...
});