Relativa sökvägar med requirejs i kombination med Typescript och AMD
Det finns flera Javascript-filer, organiserade i mapparna Scripts/folder1, Scripts/folder2, ...
Med requirejs.config.baseUrl definieras en mapp som standard, till exempel Scripts/folder1. Sedan i requirejs.config.paths adresseras vissa filer med bara filnamnet, och vissa adresseras med en relativ sökväg (som ../folder2/blabla).
När vi kodar Typescript-filen folder2/blabla.ts behöver vi modulen "math" från folder1. Så vi skriver
import MOD1 = module("../folder1/math");
När det gäller Typescript är allt okej med det. Det kan hitta modulen. Däremot finns det ett problem med requirejs. Den känner inte till modulen "../folder1/math", den känner bara till "math".
Problemet verkar vara att import-satsen förväntar sig ett filnamn, som adresseras genom att börja från den aktuella katalogen. Detta är dock inte det modul-ID som requirejs känner till.
Att använda absoluta sökvägar var som helst, både i requirejs-konfigurationen och i import-satsen i Typescript, löser problemet.
Gör jag detta på fel sätt? Eller är absoluta sökvägar vägen att gå?
Svar #1
Ange en baseUrl som motsvarar rotmappen för dina Typescript-filer:
require.config({
baseUrl: './scripts',
}
)
Då när du använder relativa sökvägar med start från skriptmappen kan du bara importera som du normalt gör i TypeScript och requirejs kommer att använda samma basväg.
Uppdatering: Denna presentation borde besvara alla dina frågor om url/att använda js från Typescript: http://www.youtube.com/watch?v=4AGQpv0MKsA med kod: https://github.com/basarat/typescript-amd/blob/master/README.md
Svar #2
Om du kräver konfiguration, specificera sökvägar för varje modul. Det borde lösa sökvägsproblemet:
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...
}
});
