2016-01-13 1 views
6

Существует ли стратегия разрешения типов в стилевом тексте, которая позволила бы мне иметь как локальный импорт не, начиная с косой черты и импорта из node_modules в том же модуле?разрешение в машинописном модуле

С «moduleResolution», установленным на «узел», компилятор не может найти мои локальные модули, со всеми другими параметрами он не видит модули в каталоге node_modules, которые я пытаюсь импортировать.

У меня есть следующий импорт в моем файле:

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

"angular2/ядро" расположено в node_modules, "ядро/регистрация/Logger" мой локальный модуль.

Я думаю, что это должно быть возможно, если вы посмотрите на угловой код, они, похоже, имеют оба, т.е. в модуле http.ts: 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 

Более сопутствующая информация:
У меня есть проект, состоящий из двух подпроектов:
- библиотека
- приложение
библиотеки определяет некоторые утилиты, которые затем использует приложение. Мой процесс сборки сначала создает подпроект «library», затем копирует его (скомпилировал js вместе с файлами d.ts) в подпапку «library» в «node_modules» приложения, а затем компилирует «приложение».

В 'библиотеке' У меня есть следующие классы:

//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 'приложения':

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

Это не будет компилировать как только JSONParser имеет какие-либо непубличные поля (они импортированных из двух разных мест, поэтому для машинописных текстов это два разных типа). Вот почему я пытаюсь импортировать свои модули без косой черты с самого начала. Но, может быть, есть другие решения?

ответ

2

Я думаю, что это должно быть возможно, если вы посмотрите на угловой код, у них, похоже, есть и то, и другое. в модуле http.ts: https://github.com/angular/angular/blob/master/modules/angular2/src/http/http.ts

Не мелочи.

Они имеют разрешения модулей classichttps://github.com/angular/angular/blob/6b73d09ba1d8c227d1b297341de2218aea5d1276/modules/angular2/tsconfig.json#L12

импорт {} Наблюдаемые из 'rxjs/Наблюдаемые'; // это, вероятно, происходит от node_modules

У них нетривиальный контур построения, специфичный для них, который сопоставляет его с node_modules. См .: https://github.com/angular/angular/blob/851647334040ec95d1ab2f376f6b6bb76ead0d9a/tools/broccoli/broccoli-typescript.ts#L271