2013-01-14 8 views
5

Mam pełną aplikację działającą z Typescript i RequireJs, działa to doskonale. Mam teraz pobrać WebEssentials i generuje minified pliki skryptów. Program WebEssentials generuje oddzielne pliki * .min.js o tej samej nazwie, co oryginalny plik skryptowy.Ładowanie plików min.js Generowanych przez TypeScript z wymaganiem

Jak mogę nakazać RequireJs załadować moje skasowane pliki zamiast oryginalnych plików skryptów?

Z góry z góry

Odpowiedz

8

Możesz użyć konfiguracji ścieżki, aby zastąpić ścieżki modułów. Możesz nawet cofnąć się do niezmineralizowanych plików:

requirejs.config({ 
    enforceDefine: true, 
    paths: { 
     jquery: [ 
      'lib/jquery.min', 
      'lib/jquery' 
     ] 
    } 
}); 

Może istnieć bardziej ogólny sposób korzystania z plików min, o których nie wiem!

+4

Jaki jest koszt wydajność tego? Twój przykład faworyzuje produkcję, ale, na przykład, powiedz, że używam '['scriptfile', 'scriptfile.min']'. ''scriptfile'' jest w dev, ale tylko' 'scriptfile.min'' jest w produkcji. Ile razy RequireJS szuka "pliku skryptu" w produkcji, raz lub na każdym wymaganym module? Zakładam, że jest trochę więcej dodatkowej pracy, ponieważ wartość właściwości to tablica zamiast łańcucha. – N13

+0

Podczas moich nieformalnych testów testuje je w odpowiedniej kolejności i jest wystarczająco inteligentny, aby zrozumieć, że 404 to 404 (co oznacza, że ​​nie chce się ponownie zaglądać). Zdecydowanie jest to wydajność, jeśli jesteś w dev, ale preferowana produkcja, lub vice versa. – Scribblemacher

0

Nie ma w tym żadnej magii. Masz kilka opcji, ale możesz użyć

  1. do wygenerowania plików min. Bardzo konfigurowalny.
  2. Użyj opcji --out kompilator aby złączyć wszystkie pliki do jednego i minify że
  3. stworzyć skrypt/partii skopiować swoją aplikację gdzieś indziej, nazwy wszystkich .min.js plików .js i nadpisać niepodlegania min te. Albo jakiś inny miks, ale dostajesz sedno
  4. Skorzystaj z paths config, jak wspomniał Steve. OK w przypadku małych aplikacji, mniej niż idealne dla dużych.

Aby uzyskać najlepszą wydajność należy przyjrzeć się optymalizator i ustalenia, czy podejście single-skrypt jest dobra decyzja lub kilka mniejszych bibliotek jest lepszym rozwiązaniem. Wątpię, aby załadowanie każdego pliku .min.js było dla ciebie idealnym rozwiązaniem.

+0

Być może parametr wyjściowy jest najlepszym rozwiązaniem. Przetestowałem już i nawet jeśli zminimalizuję i jawnie załaduję zminimalizowany plik na mojej stronie głównej, ** Require ** nadal będzie ładowało pełne, lub nie-minifikowane wersje moich skryptów. W takim przypadku, używając jednego pliku ze wszystkimi skryptami, w jaki sposób mogę powiedzieć Require, aby przestał wczytać moje skrypty, ponieważ wszystko jest już załadowane? – mvbaffa

+0

Nawiasem mówiąc, ten parametr nie działa Ok. W parametrze --out nie wygenerowano skryptu. – mvbaffa

+0

Jeśli używasz AMD '--out' nie będzie działać. Zamiast tego musisz użyć optimizera requirejs. – ryan

9

Można utworzyć prostą niestandardową wersję wymagania, która będzie warunkowo dołączać ".min.js" do wszystkich żądań plików modułów, które normalnie otrzymywałyby właśnie końcówkę ".js". Rozważmy następujący:

//Establish a new 'useMinified' boolean in your initial config. 
    require.config({ useMinified: true }); 

Następnie edytować plik require.js biblioteki i zmodyfikować funkcję „nameToUrl” jak poniżej:

//Join the path parts together, then figure out if baseUrl is needed. 
url = syms.join('/'); 

    //new statement 
var extension = config.useMinified ? '.min.js' : '.js'; 

    //customized statement 
url += (ext || (/^data\:|\?/.test(url) || skipExt ? '' : extension)); 

url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url; 
+3

Po prostu nie mogę wymyślić powodu, dlaczego nie jest to jeszcze zaimplementowane w module requirejs !? – nljuba