2016-05-13 4 views
0

Ich erstelle ein wenig Javascript Frontend-Framework. Ich entschied mich, es für HTTP 2 zu optimieren -> keine Bündelung.Steuern "exposed global variable" von UMD Javascript Modul

Ich habe asynchrone Abhängigkeit Loader, die bei Bedarf (im Browser) alle benötigten Ressourcen für die angegebene Seite lädt.

Aber es gibt ein kleines Problem. Lets sagen, dass Anwendungsprogrammierer jQuery verwenden möchte. Ich füge Skript-Tag mit jQuery an den Körper an.

Von dem, was ich verstehe, verwenden alle Bibliotheken, die auf einer CDN gehostet werden, UMD. Und da ich weder AMD, Common JS noch ES6-Import verwende, wird die jQuery-Variable dem globalen Geltungsbereich meiner Anwendung zugänglich gemacht.

Aber ich möchte nicht globalen Anwendungsbereich mit dieser Variable zu polieren. Stattdessen möchte ich in der Lage sein, diese Variable umzubenennen und sie möglicherweise dem angegebenen Namespace hinzuzufügen.

Ist es möglich?

Eine Lösung, an die ich dachte, war das Laden dieses Skripts mit XHR-Anfrage, benutze eval() darauf und irgendwie wickle das Ergebnis in den Code meines Frameworks. Aber ich bin irgendwie verloren und habe keine Ahnung, wie ich das machen soll.

Vielen Dank für jeden Hinweis.

Antwort

1

Wir können dies erreichen, indem wir Skript über XHR integrieren.

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(); 

Hier finden Sie den beigefügten JSFiddle. https://jsfiddle.net/h9aycg6m/

Aber mein Vorschlag wäre, diese Variablen nicht zu überschreiben, da $/jQuery Begriffe bereits in globaler Reichweite sind.