Wymagaj JS ignoruje moją konfigurację
Mam dość prostą strukturę katalogów dla skryptów:
/js/ <-- located in site root
libs/
jquery-1.10.1.min.js
knockout-2.2.1.js
knockout.mapping.js
models/
model-one.js
model-two.js
...
require.js
config.js
Ponieważ silnik witryny używa czystych adresów URL, używam ścieżek bezwzględnych<script>
:
<script type="text/javascript" data-main="/js/config.js" src="/js/require.js"></script>
Konfiguracja RequireJS:
requirejs.config({
baseUrl: "/js/libs",
paths: {
"jquery": "jquery-1.10.1.min",
"knockout": "knockout-2.2.1",
"komapping": "knockout.mapping"
}
});
Gdzieś w HTML:
require(["jquery", "knockout", "komapping"], function($, ko, mapping){
// ...
});
Problem polega na tym, że RequireJS całkowicie ignorujebaseUrl
ipaths
zdefiniowany w pliku konfiguracyjnym. Otrzymuję błąd 404 dla każdego modułu wymaganego w poniższym kodzie. Widzę w konsoli przeglądarki, że RequireJS próbuje załadować te moduły/js/
bez tłumaczeń ścieżek:
404: http://localhost/js/jquery.js
404: http://localhost/js/knockout.js
404: http://localhost/js/komapping.js
Jednak po załadowaniu strony i wyświetleniu błędów wpisuję w konsoli i ...
> require.toUrl("jquery")
"/js/libs/jquery-1.10.1.min"
Dlaczego tak? Jak rozwiązać ten problem?
To moje pierwsze doświadczenie z używaniem RequireJS, więc czuję, że pominąłem coś bardzo prostego i oczywistego. Prosimy o pomoc.
Aktualizacja
Właśnie odkryłem to pytanie:Require.js ignoruje baseUrl
To zdecydowanie moja sprawa. Widzę to w moim panelu sieciconfig.js
nie został wczytany całkowicierequire(...)
uruchamia własne ładowanie zależności.
Ale nie chcę umieszczać mojegorequire(...)
w config, ponieważ jest bardzo specyficzny dla strony, która go wywołuje. Nigdy nie zauważyłem takiego problemu z asynchronicznością w żadnym z wcześniejszych przykładów. Jak autorzy tych przykładów działają?