RequireJS ist eine Bibiliothek, die es erlaubt Javascript Dateien oder Module dynamisch zu laden. Das heißt, es dient dazu Dateien nicht direkt beim Öffnen einer Webseite, sondern erst, wenn diese benötigt werden, zu laden. Um diese Funktionalität anderen Entwicklern zugänglich zu machen, wird die Variable (de facto eine Funktion) require global, i.A. am window Objekt, definiert und initialisiert.
Der ACE Code-Editor besitzt eine maßgeschneiderte und schlankere Variante um Javascript Dateien oder Module zu laden im Vergleich zu der aus RequireJS. Unglücklicherweise exportiert der ACE Editor seine require Funktionalität in der "normalen" Variante in der gleichen globalen Variante wie RequireJS.
Weder der ACE Code-Editor noch RequireJS überschreiben eine bereits bestehende Variable require.
Für eine Anwendung, die Abhängigkeiten zu ACE und RequireJS besitzt, entscheidet somit die Reihenfolge in der die entsprechenden Scripts geladen bzw. ausgeführt werden, welche require Variante benutzt wird. Das ACE Code-Editor Modul besitzt zurzeit keine Abhängigkeit zu RequireJS, sodass keine bestimme Reihenfolge garantiert ist.
Wird das Skript des Code-Editors (ace.js) vor RequireJS (require.js) geladen, erhält der Benutzer beim Login u.a. die Fehlermeldung {{{#!js Uncaught TypeError: require.config is not a function }}} in der Entwicklerkonsole des verwendeten Browsers.
Umsetzung
Die Entwickler des ACE Code-Editors bieten eine konfliktfreie Variante ihres Editors an. Im Unterschied zur "normalen" Variante benutzt die konfliktfreie Variante den Namespace "ace" wenn es seine Funktionalität zum Laden von Dateien und Modulen exportiert. Das heißt, anstelle von zum Beispiel window.require befindet sich die Variante des ACE Editors dann unter window.ace.require.
In diesem Zuge sollte auf die neuste ACE Version geupdatet werden.
Test
In ext-id-c9-ace.config.xml bspw. durch {{{#!xml <file config:position="begin" resource="ace/ace.js" /> }}} festlegen, dass der ACE Editor als "erstes" geladen wird (zumindest vor require.js). Graph Demo starten und prüfen, dass nach dem Login keine Fehler in der Entwicklerkonsole zu sehen sind.