Czy jest możliwe, aby zatrzymać requireJS przed automatycznym dodaniem rozszerzenia pliku .js?
Używam requireJS do ładowania skryptów. To maten szczegół w dokumentach:
Ścieżka używana dla nazwy modułu nie powinna zawierać rozszerzenia .js, ponieważ mapowanie ścieżki może dotyczyć katalogu.
W mojej aplikacji mapuję wszystkie moje pliki skryptowe w ścieżce konfiguracyjnej, ponieważ są one generowane dynamicznie w czasie wykonywania (moje skrypty rozpoczynają życie jak rzeczy takie jakorder.js
ale stają się takimi rzeczamiorder.min.b25a571965d02d9c54871b7636ca1c5e.js
(jest to skrót zawartości pliku, dla celów cachebusting).
W niektórych przypadkach require doda drugie rozszerzenie .js do końca tych ścieżek. Chociaż generuję ścieżki dynamiczne po stronie serwera, a następnie zapełniam ścieżkę konfiguracji, muszę następnie napisać jakiś dodatkowy kod javascript, aby usunąć.js
rozszerzenie z problematycznych plików.
Czytając dokumenty requireJS, naprawdę nie rozumiem, dlaczego kiedykolwiek chciałbyś, aby mapowanie ścieżek było używane w katalogu. Czy to oznacza, że można w jakiś sposób załadować całą zawartość katalogu w jednym wywołaniu? Nie rozumiem tego.
Czy ktoś wie, czy możliwe jest wymuszenie wymogu zaprzestania dodawania plików .js do ścieżek plików, więc nie muszę się hackować?
dzięki.
UPDATE: dodano kilka próbek kodu zgodnie z żądaniem.
To jest wewnątrz mojego pliku HTML (jest to projekt Scala, więc nie możemy zapisać tych zmiennych bezpośrednio w.js
plik):
foo.js.modules = {
order : '@Static("javascripts/order.min.js")',
reqwest : 'http://5.foo.appspot.com/js/libs/reqwest',
bean : 'http://4.foo.appspot.com/js/libs/bean.min',
detect : 'order!http://4.foo.appspot.com/js/detect/detect.js',
images : 'order!http://4.foo.appspot.com/js/detect/images.js',
basicTemplate : '@Static("javascripts/libs/basicTemplate.min.js")',
trailExpander : '@Static("javascripts/libs/trailExpander.min.js")',
fetchDiscussion : '@Static("javascripts/libs/fetchDiscussion.min.js")'
mostPopular : '@Static("javascripts/libs/mostPopular.min.js")'
};
Potem w moimmain.js
:
requirejs.config({
paths: foo.js.modules
});
require([foo.js.modules.detect, foo.js.modules.images, "bean"],
function(detect, images, bean) {
// do stuff
});
W powyższym przykładzie muszę użyć ciągu „bean” (który odnosi się do ścieżki require), a nie mojego bezpośredniego obiektu (podobnie jak inne używająfoo.js.modules.bar
) w przeciwnym razie dostanę dodatkowe.js
dołączony.
Mam nadzieję, że to ma sens.