2017-02-13 3 views
2

tl; dr: Modul Auflösung gilt nicht?Typescript2 Weg Modul Auflösung

Hallo,

ich um mit Typescript2 Modul Auflösung Funktion spiele.

Ich habe bemerkt, dass es nun möglich ist, "Pfade" zu geben, so dass Sie Folgendes tun können:

Old Weg

import {a} from "services/foo" 

import {a} from "../../../foo" 

Neuer Weg

Um dies zu tun, müssen Sie einige Konfigs zu Ihrem tsconfig.json

hinzufügen
"compilerOptions": { 
     "baseUrl": ".", 
     "paths": { 
      "services/*": ["./application/core/services/*"], 
     } 
    } 

Problem, das ich habe, ist, dass, wenn kompiliert, der Import tatsächlich nicht ändert. Meine Javascript-Ausgabe enthält immer noch diesen Import von "services/foo", so dass dieser offensichtlich zur Laufzeit auf meinem Node-Server abstürzt.

ich schluck-Typoskript meine Javascript-Dateien zu kompilieren:

var tsProject = ts.createProject("tsconfig.json"); 
return tsProject.src() 
    .pipe(sourcemaps.init()) 
    .pipe(tsProject()).js 
    .pipe(sourcemaps.write("../api")) 
    .pipe(gulp.dest(function(file) { 
     return file.base; 
})); 

ich völlig hier bin verloren und würde gerne dieses Modul Auflösung zu verwenden, so dass ich weg von diesem bewegen kann ../../ Hölle von Importen. Jede Hilfe wäre mehr als nur geschätzt!

Antwort

1

Das Problem hier ist, dass die JavaScript-Engine nichts über Ihre TypeScript-Konfiguration weiß, was Sie in Ihrem tsconfig angeben wird nur "Kompilierzeit" verwendet, wenn Sie Ihre TypScript in JS kompiliert haben, müssen Sie den gleichen Job wie die tun Der TS-Compiler hat jedoch den aufgelösten Pfad in der JS-Datei gespeichert.

Einfach gesagt, müssen alle JS-Dateien verarbeitet und die Aliase durch "echte" Pfade ersetzt werden.

Tipp: Verwenden Sie das npm-Tool tspath (https://www.npmjs.com/package/tspath), es erfordert 0 Konfiguration, führen Sie es einfach irgendwo in Ihrem Projekt und alle JS-Dateien werden verarbeitet und bereit zu laufen!

Verwandte Themen