2016-01-13 4 views
6

Gibt es eine Typoskript-Modul-Lösungsstrategie, die es mir erlauben würde, beide lokale Importe nicht beginnend mit einem Schrägstrich und Importe von node_modules im selben Modul?typescript modul resolution

Wenn "moduleResolution" auf "node" gesetzt ist, kann der Compiler meine lokalen Module nicht finden, bei allen anderen Optionen werden die Module im Verzeichnis node_modules, das ich versuche zu importieren, nicht angezeigt.

ich die folgenden Importe in meiner Datei:

import {Injectable} from "angular2/core"; 
import {Logger} from "core/logging/Logger"; 

"angular2/Kern" in node_modules befindet, "core/logging/Logger" ist mein lokalen Modul.

Ich denke, dass sollte möglich sein, wenn Sie Winkel Code betrachten, scheinen sie beide zu haben, dh. im http.ts Modul: https://github.com/angular/angular/blob/master/modules/angular2/src/http/http.ts

import {Injectable} from 'angular2/core'; //this is local 
import {Observable} from 'rxjs/Observable'; //this probably comes from node_modules 

Weitere Hintergrundinformationen:
Ich habe ein Projekt, bestehend aus zwei Teilprojekten:
- Bibliothek
- App
Bibliothek definiert einige Dienstprogramme, die App dann verwendet. Mein Build-Prozess erstellt zunächst das Unterprojekt 'library', kopiert es dann (kompilierte js zusammen mit d.ts-Dateien) in den Unterordner 'library' in 'node_modules' der App und kompiliert dann die 'app'.

In 'Bibliothek' Ich habe die folgenden Klassen:

//file project/library/jsonparser/JSONParser.ts 
class JSONParser {...} 

//file project/library/services/ConfigurationService.ts 
import {JSONParser} from "../jsonparser/JSONParser" 
class ConfigurationService { 
    constructor(parser: JSONParser){ ... } 
} 

In 'App':

import {JSONParser} from "library/jsonparser/JSONParser" //this comes from node_modules in 'app' 
import {ConfigurationService} from "library/services/ConfigurationService" //from node_modules 
class AppConfigurationService extends ConfigurationService { 
    constructor(parser: JSONParser) { 
    super(parser); 
    } 
} 

Dies wird nicht so schnell kompilieren als JSONParser alle nicht öffentlichen Bereichen hat (sie sind importiert von zwei verschiedenen Orten, so für Typoskript sind dies zwei verschiedene Arten). Deshalb versuche ich zwei Module ohne den Schrägstrich am Anfang zu importieren. Aber vielleicht gibt es andere Lösungen dafür?

Antwort

2

Ich denke, dass sollte möglich sein, wenn Sie Winkel Code betrachten, scheinen sie beide zu haben, dh. im Modul http.ts: https://github.com/angular/angular/blob/master/modules/angular2/src/http/http.ts

Nicht trivial.

Sie haben Modul Auflösung classichttps://github.com/angular/angular/blob/6b73d09ba1d8c227d1b297341de2218aea5d1276/modules/angular2/tsconfig.json#L12

Import {beobachtbare} von 'rxjs/beobachtbar'; // Das kommt wahrscheinlich von node_modules

Die haben eine nicht triviale Build Pipeline spezifischen denen, die dies zu node_modules abbildet. Siehe: https://github.com/angular/angular/blob/851647334040ec95d1ab2f376f6b6bb76ead0d9a/tools/broccoli/broccoli-typescript.ts#L271

Verwandte Themen