कल्पना कीजिए कि मैं उपयोग करता हूं require
ftp_reader.rb नामक रूबी फ़ाइल लोड करने के लिए, उदा।
require "./readers/ftp_reader"
10 फाइलें उपरोक्त हैं require
कथन और इस फ़ाइल का उपयोग करें। मान लें कि मैंने ftp_reader को गलत वर्गीकृत किया है और पथ इस तरह दिखना चाहिए:
require "./remote_readers/ftp_reader"
मुझे याद रखना होगा कि कौन सी फाइलें आवश्यक हैंftp_reader, और पथ अद्यतन करें। यह एक दर्द है। मैं हमेशा अपनी परियोजना को समस्या डोमेन को यथासंभव निकटता (बीडीडी) का प्रतिनिधित्व करने के प्रयास में फ़ाइलों और फ़ोल्डर्स का नाम बदल रहा हूं और स्थानांतरित कर रहा हूं।
मेरा सवाल यह है कि, वहां कुछ मणि है जो किसी प्रकार की मेनिफेस्ट फ़ाइल का उपयोग करता है जिसमें सभी प्रोजेक्ट फाइलों के पथ होते हैं और इसका संस्करण होता है require
विधि जो मेरी निर्भरताओं का पता लगाने के लिए इस मैनिफेस्ट का उपयोग करती है? इस फ़ाइल में फाइलों के लिए उपनाम होगा और मैं अपने उपनाम का उपयोग करूंगा require
फ़ाइल पथ के बजाय कथन। अगर किसी ने requ.js का उपयोग किया है, तो यह बहुत परिचित होगा। क्या रूबी दुनिया में ऐसी चीज पहले से मौजूद है? या रूबी दुनिया में इस समस्या का सामना कैसे किया जाता है?
उत्तर:
जवाब के लिए 2 № 1अग्रिम में एक टिप्पणी: आपकी इच्छा (और मेरा जवाब) बदसूरत कोड का स्वाद है। मैं आपकी फाइलों के साथ एक या एक से अधिक रत्नों के बारे में सोचने की सलाह दूंगा। मेरे उत्तर के अंत में और अधिक।
मैंने अतीत में क्या किया था: मेरे पास अलग-अलग फ़ोल्डरों और एक आम फ़ाइल में छोटी स्क्रिप्ट भी थीं myscripts.rb
। इस myscripts.rb
मेरी अधिकांश फाइलों की शुरुआत में लोड किया गया था और लोडिंग पथ सेट किया गया था:
require_relative "../myscripts.rb" #
require "ftp_reader"
myscripts.rb
के रूप में परिभाषित किया गया था:
$:.unshift("c:/<..full_path..>/readers/")
$:.unshift("c:/<..full_path..>/writters/")
#... more pathes ...
जब मैंने अपनी फ़ोल्डर संरचना बदल दी, तो मुझे केवल मेरी जरूरत है myscripts.rb
:
$:.unshift("c:/<..full_path..>/remote_readers/")
सभी स्क्रिप्ट्स अब नई फ़ोल्डर संरचना का इस्तेमाल करती हैं, क्योंकि मेरा myscripts.rb
इसे कभी भी स्थान नहीं बदला।
मैंने पूरा पथ इस्तेमाल किया, क्योंकि सापेक्ष पथ मुख्य फ़ाइल के सापेक्ष होंगे, न कि myscripts.rb
.
गठबंधन करने की संभावना होगी __FILE__
तथा expand_path
मेरे लिए सापेक्ष पट्टियों का उपयोग करने के लिए myscripts.rb
- लेकिन मैंने कभी इसका इस्तेमाल नहीं किया।
समस्या: अगर मैं अपनी स्क्रिप्ट का नाम बदलता हूं, तो यह काम नहीं करता है (अक्सर मैंने पुरानी लिपि का नाम रखा और नया लोड किया)। और यह पुराने संस्करणों के साथ लचीला नहीं था।
बाद में मैंने एक मणि बनाया mytools
और इस मणि को सभी स्क्रिप्ट जोड़ दी। अगर मुझे पुराने संस्करण की आवश्यकता है, तो पुराने संस्करण को लोड करना संभव था।
आज मैं प्रत्येक चिंता / विषय के लिए एक मणि बनाते हैं। इससे कोई फर्क नहीं पड़ता कि मणि में कितनी फाइलें हैं। एक मणि मेरे लिए एक समस्या हल करता है। फाइलों की संख्या महत्वपूर्ण नहीं है, लेकिन चिंताओ का विभाजन। एक मणि में चिंता का समाधान करने के लिए स्क्रिप्ट शामिल हैं, परीक्षण और यह एक दस्तावेज़ीकरण के लिए आधार है।
जवाब के लिए 0 № 2
अधिकांश लोग निर्भरता की समस्या से निपटते हैंरुबी में एक बंडल प्रबंधक के साथ प्रबंधन। बंडलर सबसे बड़ा है, क्योंकि यह रेल में शामिल है। आप एक जेमफाइल बनाते हैं जो आप उपयोग करने के लिए इच्छित सभी बंडल निर्दिष्ट करते हैं, बंडलर बंडलों का अपना भंडार बनाता है, और आप उन्हें अपनी पसंद के अनुसार ही आवश्यकता कर सकते हैं। यदि आप सर्वर-साइड जावास्क्रिप्ट करते हैं, तो यह एनपीएम के समान ही है।