परिचय: स्थानीय क्रेट क्यों एक विलासिता नहीं, बल्कि एक आवश्यकता है
\n\nकल्पना करें: आप कॉन्फ़िगरेशन फ़ाइलों को पार्स करने के लिए Rust में एक लाइब्रेरी लिख रहे हैं। यह अभी भी कच्ची है, crates.io पर प्रकाशन के लिए तैयार नहीं है, लेकिन आप इसे पहले से ही एक वास्तविक प्रोजेक्ट में परीक्षण करना चाहते हैं - Actix पर एक वेब सर्वर या CLI उपयोगिता। क्या करें? कोड कॉपी करें? मोनोरेपो बनाएँ? नहीं, Rust में इसके लिए एक सुरुचिपूर्ण समाधान है - स्थानीय अप्रकाशित क्रेट।
प्रश्न "How to use a local unpublished crate?" ने Stack Overflow पर हज़ारों बार देखा गया है। यह कोई संयोग नहीं है: प्रत्येक Rust डेवलपर को देर-सबेर अपने स्वयं के क्रेट को कनेक्ट करने की आवश्यकता का सामना करना पड़ता है, जो अभी तक प्रकाशित नहीं हुआ है। इस लेख में, हम सभी तरीकों पर चर्चा करेंगे - पथ निर्दिष्ट करने से लेकर Git-निर्भरताओं और workspaces के साथ काम करने तक। चलिए शुरू करते हैं!
\n\nअप्रकाशित क्रेट क्या है और इसकी आवश्यकता क्यों है?
\n\nUnpublished crate (अप्रकाशित क्रेट) एक Rust पैकेज है जो केवल आपकी स्थानीय डिस्क या निजी रिपॉजिटरी में मौजूद है। यह crates.io पर अपलोड नहीं किया गया है और अन्य डेवलपर्स के लिए उपलब्ध नहीं है (जब तक कि आप उन्हें फ़ाइलों तक पहुँच न दें)।
उपयोग के विशिष्ट परिदृश्य:
\n- \n
- मुख्य प्रोजेक्ट के समानांतर लाइब्रेरी विकसित करना \n
- रीफैक्टरिंग: आप कोड के एक भाग को एक अलग क्रेट में अलग कर रहे हैं \n
- निजी कॉर्पोरेट लाइब्रेरीज़ जिन्हें प्रकाशित नहीं किया जा सकता \n
- प्रकाशन से पहले निर्भरताओं का परीक्षण \n
मुख्य लाभ यह है कि आपको कोड पर पूर्ण नियंत्रण मिलता है और आप crates.io पर प्रकाशन की प्रतीक्षा किए बिना तुरंत बदलाव कर सकते हैं।
\n\nविधि 1: Path निर्भरता - सबसे सरल और तेज़
\n\nयह मूल विधि है, जो तब उपयुक्त होती है जब दोनों प्रोजेक्ट (निर्भरता और आश्रित) आपके कंप्यूटर पर हों।
\n\nप्रोजेक्ट संरचना
\n\nमान लीजिए, आपके पास निम्नलिखित फ़ोल्डर संरचना है:
\n\nmy_project/\n├── my_lib/ # अप्रकाशित क्रेट\n│ ├── Cargo.toml\n│ └── src/\n│ └── lib.rs\n└── my_app/ # मुख्य प्रोजेक्ट\n ├── Cargo.toml\n └── src/\n └── main.rs\n\nचरण 1: लाइब्रेरी my_lib बनाएँ
\n\nmy_lib/Cargo.toml के अंदर:
[package]\nname = "my_lib"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\n\nmy_lib/src/lib.rs में एक सरल फ़ंक्शन लिखें:
pub fn greet(name: &str) -> String {\n format!("नमस्ते, {}! यह एक स्थानीय क्रेट है।", name)\n}\n\nचरण 2: my_app में my_lib को path के माध्यम से कनेक्ट करें
\n\nmy_app/Cargo.toml में [dependencies] अनुभाग जोड़ें:
[package]\nname = "my_app"\nversion = "0.1.0"\nedition = "2021"\n\n[dependencies]\nmy_lib = { path = "../my_lib" }\n\nध्यान दें: पथ मुख्य प्रोजेक्ट की Cargo.toml फ़ाइल के सापेक्ष निर्दिष्ट किया गया है। यदि लाइब्रेरी किसी अन्य निर्देशिका में है, तो निरपेक्ष या सापेक्ष पथ निर्दिष्ट करें।
चरण 3: कोड में क्रेट का उपयोग करें
\n\nmy_app/src/main.rs में:
use my_lib::greet;\n\nfn main() {\n let message = greet("अलेक्से");\n println!("{}", message);\n}\n\nचलाएँ: cargo run - और आउटपुट देखें: "नमस्ते, अलेक्से! यह एक स्थानीय क्रेट है।"
महत्वपूर्ण! my_lib में कोई भी बदलाव my_app के अगले बिल्ड पर स्वचालित रूप से लागू हो जाएगा। कुछ भी पुनः स्थापित या संस्करण अपडेट करने की आवश्यकता नहीं है।
विधि 2: Git-निर्भरताएँ - टीम वर्क के लिए
\n\nयदि आप एक टीम में काम करते हैं या कोड को Git में संग्रहीत करते हैं, तो Git-निर्भरताओं का उपयोग करना बेहतर है। यह तब सुविधाजनक होता है जब क्रेट एक अलग रिपॉजिटरी (निजी भी) में होता है।
\n\nसेटअप
\n\nमान लीजिए, आपका अप्रकाशित क्रेट my_lib रिपॉजिटरी https://github.com/yourname/my_lib.git में है