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...
    }
});

Relaterade artiklar