के साथ परिपत्र निर्भरता समस्या मैं आंतरिक मॉड्यूल से बाह्य मॉड्यूल तक काफी बड़ी टाइपस्क्रिप्ट परियोजना को स्थानांतरित करने की प्रक्रिया में हूं। मैं ऐसा इसलिए करता हूं क्योंकि मैं एक कोर बंडल बनाना चाहता हूं, जो, यदि और जब आवश्यक हो, तो अन्य बंडल लोड कर सकते हैं। एक सीकंड आवश्यकता जो मैं ध्यान में रख रहा हूं वह यह है कि मैं सर्वर पर नोडजेएस के साथ बंडलों को चलाने में सक्षम होना चाहता हूं (यदि आवश्यक हो तो कुछ संशोधनों के साथ)।टाइपस्क्रिप्ट, कॉमनजेएस और ब्राउज़र
मैंने पहली बार कोर बंडल बनाने के लिए AMD & require.js का उपयोग करने का प्रयास किया, लेकिन मैं परिपत्र निर्भरताओं के साथ एक समस्या में आया। यह पढ़ने के बाद कि यह requ.js के साथ आम है और सामान्य जेएस को अक्सर बड़ी परियोजना के लिए सलाह दी जाती है, मैंने कोशिश की। लेकिन अब यह ब्राउज़र के साथ एक साथ स्थापित है, मेरे पास सटीक संकलित बंडल चलाने पर एक ही समस्या ठीक उसी स्थान पर आ रहा है।
मेरे पास 10 आधार वर्गों की तरह कुछ है जो हर दूसरे पर भरोसा करते हैं और कई परिपत्र निर्भरता बनाते हैं। मुझे उन सभी को हटाने का कोई तरीका नहीं दिख रहा है। क्यों मुझे नहीं लगता कि मैं परिपत्र निर्भरता को दूर कर सकते हैं
एक सरलीकृत सेटअप व्याख्या करने के लिए:
Triples are made of 3 Resources (subject,predicate,object)
Resource has TripleCollections to keep track of which triples its used in
Resource has multiple functions which rely on properties of Triple
Triple has some functions which handle TripleCollections
TripleCollection has multiple functions which uses functions of Triple
TripleCollection.getSubjects() returns a ResourceCollection
ResourceCollection.getTriples() returns a TripleCollection
Resource keeps track of the objects of its triples in ResourceCollections
ResourceCollection uses multiple functions of Resource
मैं इतना (this one सबसे उपयोगी किया जा रहा है) पर यहाँ कई संबंधित मुद्दों पढ़ा है, और से क्या मैं इकट्ठा कर सकते हैं मेरे पास केवल कुछ विकल्प हैं:
1) सभी मूल वर्गों को गोलाकार निर्भरताओं के साथ 1 फ़ाइल में रखें।
इसका मतलब है कि यह एक फ़ाइल का नरक बन जाएगा। और आयात हमेशा उपनाम की आवश्यकता होगी:
import core = require('core');
import BaseA = core.BaseA;
2) आंतरिक मॉड्यूल
कोर बंडल ठीक काम किया (अपने परिपत्र निर्भरता के साथ) जब मैं आंतरिक टाइपप्रति मॉड्यूल और संदर्भ फ़ाइलों का उपयोग का उपयोग करें। हालांकि अगर मैं अलग-अलग बंडल बनाना चाहता हूं और उन्हें रन टाइम पर लोड करना चाहता हूं, तो मुझे requ.js के साथ सभी मॉड्यूल के लिए शिम्स का उपयोग करना होगा।
हालांकि मैं वास्तव में सभी अलियासिंग की तरह, मुझे लगता है क्योंकि अगर यह काम करता है मैं CommonJS के साथ जा रहा रखने के लिए और browserify और बाद में मैं भी और अधिक आसानी से सब कुछ चलाए जा सकते हैं मैं अब विकल्प 1 की कोशिश करेंगे, करते हैं नोड में सर्वर। और यदि विकल्प काम नहीं करता है तो मुझे विकल्प 2 का सहारा लेना होगा।
प्रश्न 1: क्या कोई संभावित समाधान है जिसका मैंने उल्लेख नहीं किया है?
प्रश्न 2: 1 कोर बंडल के साथ टाइपस्क्रिप्ट प्रोजेक्ट के लिए सबसे अच्छा सेटअप क्या है जो मांग पर अन्य बंडलों (जो कोर पर निर्माण) लोड करता है। ऐसा लगता है कि सर्कुलर निर्भरताओं के आसपास नहीं जा सकता है। और जो क्लाइंट और सर्वर दोनों पर अधिमानतः चल सकता है।
या क्या मैं सिर्फ असंभव पूछ रहा हूं? :)
धन्यवाद स्टीव, आप रॉक। मैं दो तरह की निर्भरताओं को हटाने की कोशिश करने में कुछ और समय बिताने जा रहा हूं और सूची से आंतरिक मॉड्यूल पार कर रहा हूं। मॉड्यूल _is_ क्या उत्कृष्टता से नोट्स भी उपयोगी हैं। क्योंकि अब - अगर मैं चीजों को एक फाइल में डालता हूं - यह एक वर्कअराउंड की तरह कम महसूस करेगा, और मॉड्यूल के तरीके के प्राकृतिक परिणाम की तरह। यह सब वास्तव में मुझे कुछ और निश्चितता – Flion
@ फ़्लियन के साथ आगे बढ़ने में मदद करता है, जो कि आप [निर्भरता संरचना मैट्रिक्स] (http://stackoverflow.com/questions/1841552/what- ओपन-सोर्स-विकल्प-टू-लैटिक्स) और विशेष रूप से कुछ टूल्स द्वारा ऑफ़र किए गए स्वचालित विभाजन एल्गोरिदम में से कुछ, उदाहरण के लिए http://lattix.com/videos – xmojmr
मुझे लगता है कि मुझे भ्रमित करने वाला क्या था मेरी डेटाबेस संरचना के ठीक बाद मेरे जावास्क्रिप्ट कक्षाओं को मॉडल करने का प्रयास कर रहा था। निश्चित रूप से वे एक-दूसरे के समान होना चाहिए, लेकिन डेटाबेस डिज़ाइन में सर्कुलर निर्भरता वर्जित नहीं हैं और इससे मुझे फिसल गया। एक बार मुझे एहसास हुआ कि वे विभिन्न उद्देश्यों की सेवा करते हैं, यह समझना आसान था कि प्रत्येक को कैसे मॉडलिंग किया जाना चाहिए। – aaaaaa