Problem is pretty straightforward, here is the test code I wrote for this case.
App
<aura:application >
<aura:handler event="c:RequireJSEvent" action="{!c.initJS}"/>
<aura:registerEvent type="c:RequireJSEvent" name="requireJSEvent"/>
<aura:handler name="init" value="{!this}" action="{!c.doInit}" />
</aura:application>
Controller
({
doInit : function(cmp, event, helper) {
console.log("doinit");
if (typeof require !== "undefined") {
var evt = $A.get("e.c:RequireJSEvent");
evt.fire();
} else {
var head = document.getElementsByTagName('head')[0];
var script = document.createElement('script');
script.src = "/resource/RequireJS";
script.type = 'text/javascript';
script.key = "/resource/RequireJS";
script.helper = this;
script.id = "script_" + cmp.getGlobalId();
var hlp = helper;
script.onload = function scriptLoaded(){
var evt = $A.get("e.c:RequireJSEvent");
evt.fire();
};
head.appendChild(script);
}
},
initJS : function(component, event, helper){
require.config({
paths: {
"jquery": "/resource/jquery?"
}
});
console.log("RequiresJS has been loaded? "+(require !== "undefined"));
//loading libraries sequentially
require(["jquery"], function($) {
console.log("jQuery has been loaded? "+($ !== "undefined"));
});//require end
}
})
Console output with LockerService on
Console output without LockerService on
I have a feeling the access check warning might have to do something with this, but I'm not sure..