2013-05-04 23 views
5

Istnieje kilka plików JavaScript, organizowane w folderach scripts/folder1 scripts/folderze folder2 ...Ścieżki względne wykorzystujące requirejs w połączeniu z maszynopis i AMD

Z requirejs.config.baseUrl folder jest zdefiniowany jako domyślny , na przykład Skrypty/folder1. Następnie w requirejs.config.path niektóre pliki są adresowane tylko nazwą pliku, a niektóre są adresowane względną ścieżką (jak ../folder2/blabla).

Podczas kodowania pliku Typescipt folder2/blabla.ts potrzebujemy modułu "matematyka" z folderu1. Tak więc piszemy:

import MOD1 = module("../folder1/math"); 

Wszystko jest w porządku z tym wszystkim. Może znaleźć moduł. Jednak w przypadku requirejs występuje problem. Nie zna modułu "../folder1/math", zna tylko "matematykę".

Problem polega na tym, że instrukcja importu oczekuje nazwy pliku, adresowanej do wyjścia z bieżącego katalogu. Jednak nie jest to identyfikator modułu, o którym informuje program requirejs.

Używanie bezwzględnych ścieżek w dowolnym miejscu, zarówno w konfiguracji requirejs, jak i w instrukcji importu w Maszynopisie, rozwiązuje problem.

Czy robię to źle? Czy też absolutne ścieżki są drogą do zrobienia?

+1

Znalazłem że albo bezwzględne ścieżki lub ścieżki względne do pierwszego modułu, które wymagają js ładuje (zazwyczaj katalog główny mojej aplikacji js - folder Scripts lub folder Durandal w aplikacji - ale niekoniecznie jest to katalog główny mojej witryny). – JcFx

+0

Wielkie dzięki za odpowiedź. Jeśli pierwszy moduł znajduje się w/Scripts, baseUrl zostanie ustawione na tę ścieżkę. Następnie, jeśli używany jest moduł z "folderu1", w przypadku requirejs należy go adresować jak "folder1/blabla". Co wtedy napiszesz w instrukcji Typescript? Czy piszesz moduł ("folder1/blabla")? Co się stanie, jeśli moduł, w którym zapisano instrukcję importu, zostanie zapisany w "folderze2"? Czy Maszynopis następnie akceptuje moduł ("folder1/blabla")? – mgs

+0

Tak. O ile widzę, ścieżka nie zmienia się, gdziekolwiek się importujesz (o ile nadal jesteś w tym samym kontekście aplikacji - tak samo w łańcuchu modułów załadowanych z tego początkowego adresu bazowego). – JcFx

Odpowiedz

6

Określ baseUrl być równoznaczne z folderu głównego maszynopis pliki:

require.config({ 
    baseUrl: './scripts', 
} 
) 

Następnie po użyciu ścieżek względnych począwszy od skryptów folderu można po prostu zrobić importuj jak zwykle w maszynopisie, a requirejs użyje tej samej ścieżki bazowej.

Aktualizacja: Niniejsza prezentacja powinna powinna odpowiedzieć na wszystkie Twoje URL/JS z użyciem maszynopis pytania: http://www.youtube.com/watch?v=4AGQpv0MKsA z kodem: https://github.com/basarat/typescript-amd/blob/master/README.md

+0

Wielkie dzięki za odpowiedź. Tak więc w sekcji ścieżki requirejs identyfikatorami modułów będą np. "folder/blabla".Jest to identyfikator, którego nie można użyć z instrukcją importu. Moduł piszący ("folder/blabla") nie będzie działał, ponieważ folderem podstawowym pliku tekstowego wydaje się być folder, w którym znajduje się aktualnie edytowany plik. Więc jeśli aktualnie edytowany plik maszynopisu znajduje się w "innym folderze", to instrukcja będzie szukała "kolejny folder/folder/blabla". – mgs

+0

@mgs Stworzyłem prezentację (patrz aktualizacja), aby odpowiedzieć na wszelkie pytania. Jeśli to nie pomoże, daj mi znać. Nie mam pewności co do problemu, który pan ma. – basarat

+0

@ mgs możesz rozwidlić projekt i stworzyć sytuację błędu, którą masz. Wtedy mogę rzucić okiem na to. – basarat

2

W wymaganej konfiguracji podaj ścieżki dla każdego modułu. Że problem powinien rozwiązać ścieżki:

require.config({ 
    paths: { 
     jquery: 'libs/jquery-1.7.1.min', 
     jqueryui: 'http://ajax.googleapis.com/ajax/libs/jqueryui/1.9.2/jquery-ui.min' 
     // Other modules... 
    } 
}); 
+0

Wielkie dzięki za odpowiedź. Jeśli moduł jest określony w ten sposób, to w jaki sposób instrukcja importu ma być zapisana w Maszynopisie? Jeśli aktualnie edytowany plik maszynopisu znajduje się w tym samym folderze, można go używać z modułem ("blabla") i wszystko jest w porządku. Jeśli jednak znajduje się w innym folderze, należy użyć czegoś takiego jak moduł ("../ folder/blabla"). A potem requirejs nic nie wie o module. – mgs

+0

To nie jest dobra odpowiedź. Uciążliwe jest pisanie wszystkich modułów używanych w aplikacji w obiekcie "ścieżki". –

Powiązane problemy