2016-01-13 14 views
6

क्या कोई टाइपस्क्रिप्ट मॉड्यूल रिज़ॉल्यूशन रणनीति है जो मुझे स्थानीय आयात दोनों को उसी मॉड्यूल में नोड_मोड्यूल से स्लैश और आयात से शुरू करने की अनुमति देगी?टाइपस्क्रिप्ट मॉड्यूल रिज़ोल्यूशन

कंपाइलर "नोड" पर सेट "मॉड्यूलरोल्यूशन" के साथ मेरे स्थानीय मॉड्यूल नहीं मिल पा रहे हैं, अन्य सभी विकल्पों के साथ यह node_modules निर्देशिका में मॉड्यूल नहीं देखता है, मैं आयात करने की कोशिश कर रहा हूं।

मैं अपने फ़ाइल में निम्न आयात है:

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

"angular2/मूल" node_modules में स्थित है, "कोर/प्रवेश/लॉगर" मेरे स्थानीय मॉड्यूल है।

मुझे लगता है कि यह संभव होना चाहिए, यदि आप कोणीय के कोड को देखते हैं तो वे दोनों होते हैं, यानी। 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 

अधिक पृष्ठभूमि जानकारी:
मैं दो उप से मिलकर एक परियोजना है:
- पुस्तकालय
- एप्लिकेशन
लाइब्रेरी कुछ उपयोगिताओं जो एप्लिकेशन तो का उपयोग करता है परिभाषित करता है। मेरी बिल्ड प्रक्रिया पहले 'लाइब्रेरी' सबप्रोजेक्ट बनाता है, फिर इसे 'एप के नोड_मोड्यूल' में 'लाइब्रेरी' उपफोल्डर में कॉपी करता है (डीएसटी फाइलों के साथ संकलित जेएस), फिर 'ऐप' को संकलित करता है।

'पुस्तकालय' मैं निम्नलिखित श्रेणियां होती हैं में:

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

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

'ऐप्लिकेशन' में:

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

संबंधित मुद्दे