控制"暴露的全局变量" UMD javascript模块

时间:2016-05-13 16:11:11

标签: javascript module umd

我正在创建一个小的Javascript前端框架。 我决定针对HTTP 2优化它 - >没有捆绑。

我有异步依赖加载器,按需(在浏览器中)加载给定页面所需的所有资源。

但是有一点问题。 让我们说应用程序员想要使用jQuery。我将带有jQuery的脚本标记添加到正文中。

据我所知,cdn上托管的所有库都使用UMD。由于我不使用AMD,Common JS或ES6导入,因此它将jQuery变量暴露给我的应用程序全局范围。

但我不想用该变量来规范全局应用程序范围。相反,我希望能够重命名该变量,并可能将其添加到给定的命名空间。

有可能吗?

我想到的一个解决方案是使用XHR请求加载该脚本,在其上使用eval()并以某种方式将结果包装在我的框架代码中。但我有点失落,不知道该怎么做。

感谢您的任何建议。

1 个答案:

答案 0 :(得分:1)

我们可以通过XHR包含脚本来实现这一点。

var myObj = {};
var myOverride = function(res){
  var jqRes = res.currentTarget.responseText;
  console.log(res.type);
  eval(jqRes);
  myObj.jq = $;
  $ = undefined;
  console.log(myObj.jq);
}
var xhr =  new XMLHttpRequest();
xhr.open("GET","https://code.jquery.com/jquery-2.2.3.js");
xhr.addEventListener("load",myOverride);
xhr.send();

请找到附带的JSFiddle。 https://jsfiddle.net/h9aycg6m/

但我的建议是不要覆盖这些变量,因为$ / jQuery这些术语已经在全球范围内。