2016-09-09 9 views
1

Meine Projektstruktur sieht wie folgt ausRequireJS manchmal nicht jQuery

root/ 
    lib/ 
    js/ 

In meinem js Ordner laden Ich habe eine erfordern-config-Datei, die Javascript-Dateien im Verzeichnis lib verweist. Wie so:

require.config({ 
    paths: { 
     jquery: ["../lib/jquery/dist/jquery"], 
    } 
}); 

im Hinblick Initiiert etwa so:

<script data-main="js/require-config" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script>require(["viewModels/searchViewModel"]);</script> 

Und das ist, wie mein searchViewModel aussieht (weggelassen Code in Funktion), von Typoskript generiert:

define(["require", "exports", "jquery"], function (require, exports, $) { 
    "use strict"; 
    var SearchViewModel = (function() { 
     function SearchViewModel() { 
     } 
     return SearchViewModel; 
    } 
}); 

Für die meiste Zeit scheint es kein Problem zu geben, die richtige Datei zu finden. Gelegentlich sucht es jedoch nach der JQuery-Datei in /js/jquery.js, die den Browser veranlasst, eine 404 für http://localhost/js/jquery.js zu werfen.

Mache ich etwas in der Require-Konfiguration falsch? Und wie funktioniert es manchmal und manchmal nicht?

Antwort

0

Verwenden Sie nicht data-main, um Ihre RequireJS-Konfiguration zu laden. Der Grund, warum es intermittierend funktioniert, ist, weil data-main bewirkt, dass RequireJS das benannte Skript asynchron lädt. Wenn Sie also require(["viewModels/searchViewModel"]); ausführen, wurde Ihre Konfiguration nicht unbedingt geladen.

data-main Konfiguration zu laden Verwendung ist nur sicher, wenn alle der Code, der durch die gleiche auf dieser Konfiguration hängt Datei übergeben Sie data-main geladen wird. Dies könnte daran liegen, dass Sie ein Paket erstellt haben, das alle Module Ihrer App plus die Konfiguration enthält, oder weil Sie in der Konfiguration nur deps verwenden, um Module nach dem Laden der Konfiguration zu laden.

Ihr Fall ist nicht sicher, weil Sie außerhalb das Modul data-main geladen haben, die von der geladenen Konfiguration abhängen.

Teilen Sie Ihre script wie folgt aus:

<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.1/require.min.js"></script> 
<script src="js/require-config.js"></script> 
Verwandte Themen