2016-03-18 2 views
1

Ich habe eine sehr einfache config.js Datei, die wie erwartet funktioniert, solange es unter der Stamm-URL bereitgestellt wird. Hier ist die Probe config.js Datei:SystemJS relative Pfade

System.config({ 
    //use typescript for compilation 
    transpiler: 'typescript', 
    //typescript compiler options 
    typescriptOptions: { 
    emitDecoratorMetadata: true 
    }, 
    //map tells the System loader where to look for things 
    map: { 
     app: "./src", 
    }, 
    //packages defines our app package 
    packages: { 
    app: { 
     main: './app.ts', 
     defaultExtension: 'ts' 
    } 
    } 
}); 

Solange diese Datei aus dem Stammpfad geladen wird <script src="/config.js"> und Standorte sind
http://localhost/config.js und http://localhost/src/app.ts alles funktioniert gut.

ich jetzt versuchen, die config.js Datei zu einem tieferen Verzeichnis zu verschieben, und laden Sie sie mögen: <script src="https://stackoverflow.com/a/b/c/d/e/config.js">, aber wenn ich das brauche ich dann zu hart Code den Pfad auf der config.js Datei selbst wie:

//map tells the System loader where to look for things 
    map: { 
     app: "./a/b/c/d/e/src", 
    }, 

Kann der gesamte Pfad in der Datei config.js nicht fest codiert werden? Ich hätte gedacht, der führende ./ meinte "relativ zu" aber es tut es nicht. Wenn ich den vollständigen Pfad nicht wieder fest programmiere, funktioniert es nicht. Was ist (oder gibt es) eine Syntax, um den relativen Ort anzugeben?

Antwort

5

'./' bedeutet relativ, aber es ist relativ zu dem 'Kontext' wo Ihre js-Datei, wenn geladen. Ich nehme an, dass Sie es auf der Seite wie index.html laden, die sich im Stammordner befindet - das ist Ihr "Kontext" und alle Pfade sind relativ dazu. Wenn Sie also config.js in einen anderen nicht-root-Speicherort verschieben und dann in die html-Stammseite laden, ändert sich der Kontext nicht, der immer noch der Stammordner ist, während sich der Speicherort der src-Dateien geändert hat und Sie nun zur Bereitstellung gezwungen werden neue Pfade zu ihnen in Ihrer config.js.

Um es einfacher zu machen, können Sie systemjs baseURL Eigenschaft verwenden. Dann müssen Sie den Pfad nur an einer Stelle ändern, ohne sie für jedes Paket neu schreiben zu müssen.

+0

Danke für die Antwort. Dieses "Kontext" -Verhalten überrascht mich (indem ich den HTML-Pfad (index.html) verwende, um JS zu setzen), da davon ausgegangen wird, dass die HTML- und JS-Dateien in den gleichen Verzeichnissen zusammengefasst sind. In meinem Fall nicht, das ist eine REST-App, bei der die HTML-Dateien in einer Domäne und die JS-Dateien in einer anderen Domäne gespeichert sind. Daher kann nicht davon ausgegangen werden, dass die Verzeichnispfade für eine Gruppe identisch sind. Ich werde in baseURL nachsehen, das du erwähnst, sonst muss ich die Werte fest codieren. –