मैं कैसे तय करूं कि क्या @ प्रकार / * `निर्भरता` या` देव-निर्भरता` में चला जाता है?


195

मैं अपने प्रोजेक्ट में टाइपस्क्रिप्ट 2 का उपयोग करता हूं। मैं कुछ js लाइब्रेरी का उपयोग करना चाहूंगा, लेकिन उस लाइब्रेरी के लिए टाइपिंग भी। मैं सरल के साथ प्रकार स्थापित कर सकते हैं npm install @types/some-library। मुझे यकीन नहीं है कि मुझे चाहिए --saveया --save-devउन्हें। यह मुझे लगता है कि निश्चित रूप से गिथबब दोनों संस्करणों का उल्लेख करता है, लेकिन कभी भी उन्हें नहीं समझाता है। मुझे लगता है कि @types में होना चाहिए devDependencies, क्योंकि विकास के लिए प्रकारों की आवश्यकता होती है और रनटाइम में उपयोग नहीं किया जाता है, लेकिन मैंने कई बार @types को बस में देखा dependencies। मैं उलझन में हूं।

मुझे यह कैसे तय करना चाहिए कि @ प्रकार / * में जाता है dependenciesया नहीं devDependencies? क्या वास्तव में कुछ अधिक या कम आधिकारिक निर्देश हैं?


क्या आप एक बंडल बना रहे हैं या यह एक पैकेज है जो दूसरों द्वारा उपयोग किया जाएगा? जैसा कि मैंने देखा है कि आपको केवल dependenciesऔर devDependenciesबाद के मामले में अंतर बनाने की जरूरत है ।
वैलेंटाइन

मैं खरोंच से js / ts में कुछ खेल बनाता हूं। मैं सब कुछ webpack के साथ बंडल। वहाँ सब पर कोई बैकेंड नहीं है, लेकिन यह संभव है कि मैं इसे इलेक्ट्रॉन में लपेट दूंगा किसी दिन इसे स्टैंडअलोन बनाने के लिए। मुझे नहीं लगता कि कोई भी कभी भी अपने स्वयं के ऐप पर निर्भरता के रूप में इसका उपयोग करेगा, लेकिन मुझे लगता है कि यह संभव हो सकता है (GTA खेलों में मिनी के बारे में सोचो; और मेरा खेल खुला स्रोत है)। फिर भी, मैं सर्वोत्तम प्रथाओं को सीखना और उनका पालन करना चाहता हूं और यह मुख्य कारण है कि मैं यह खेल बनाता हूं। मुझे आशा है कि मैंने अपने उपयोग-मामले को अच्छी तरह से स्पष्ट किया है। :)
कैमिल

1
हां, यह समझ में आता है, बस यह सुनिश्चित करना चाहता था कि मेरा मूल उत्तर आपके उपयोग के मामले के लिए प्रासंगिक था। मैं अब भी लगता है कि बीच के अंतर को devDependenciesऔर dependenciesअप्रासंगिक जब एक बंडल निर्माण है, यह के कुछ है कि create-react-appलागू करता है और साथ ही लेकिन अंत में यह आप पर निर्भर है चुनने के लिए
वैलेन्टिन

जवाबों:


133

मान लें कि आप एक पैकेज "ए" विकसित कर रहे हैं जिसमें @ प्रकार / कुछ-मॉड्यूल पैकेज देव-निर्भरता में हैं। किसी कारण से आप @ प्रकार / कुछ-मॉड्यूल से प्रकार निर्यात कर रहे हैं

import {SomeType} from 'some-module';
export default class APackageClass {
     constructor(private config: SomeType) {

     }
}

अभी पैकेज "ए" के टाइपस्क्रिप्ट उपभोक्ताओं को यह अनुमान लगाने में असमर्थ हैं कि SomeType क्या है, क्योंकि पैकेज "A" की निर्भरता स्थापित नहीं है।

उस विशेष मामले में आपको नियमित "निर्भरता" के साथ @ प्रकार / * पैकेज रखने की आवश्यकता है। अन्य मामलों के लिए "भरोसेमंद" पर्याप्त हैं।


6
तो आप इसका मतलब है कि, अगर मैं केवल कार्यान्वयन में प्रकार का उपयोग करता हूं, तो यह टाइप परिभाषा हो सकती है devDependencies?
फ्रैंकलिन यू

6
हाँ @FranklinYu। जैसे ही प्रकार घोषणा फ़ाइल में दिखाई देता है, आपको इसे चालू करने की आवश्यकता होती है dependencies। अन्यथा devDependenciesठीक है
wookieb

1
लेकिन एक पैकेज टीएस और जेएस दोनों के लिए काम करता है। जेएस डेवलपर्स को अपने कोड को संकलित करने के लिए उन प्रकारों की आवश्यकता नहीं है। प्रकार की परिभाषा को जोड़ने से dependenciesनिर्भरता वृक्ष फूला हुआ होगा।
टायलर लॉन्ग

1
@ टायलरलॉन्ग सही। यह सही नहीं है लेकिन यह वास्तविकता है। वैकल्पिक रूप से आप "वैकल्पिक निर्भरता" का भी उपयोग कर सकते हैं, लेकिन मेरा मानना ​​है कि बड़े पैमाने पर यह बहुत कष्टप्रद हो सकता है।
wookieb

55

तुम सिर्फ एक बंडल पैदा कर रहे हैं के बीच भेद करने के लिए कोई ज़रूरत नहीं हो सकता है dependenciesऔर devDependencies। यह सुविधा npmआम तौर पर एक पैकेज को प्रकाशित करते समय उपयोगी होती है जिसे दूसरों द्वारा उपयोग किया जा सकता है और आप उन्हें अनावश्यक निर्भरता के साथ स्पैम नहीं करना चाहते हैं।

ऐसे अन्य उपयोग के मामले हो सकते हैं जहां विभाजन निर्भरता सहायक हो सकती है लेकिन जब तक आपको इसके लिए एक एक्सप्रेस की आवश्यकता नहीं होती है, तो मेरी सलाह है कि बस एक को चुनें और वहां सब कुछ डालें। जरूरत पड़ने पर उन्हें बाद में विभाजित करना मुश्किल नहीं है।

इस अभ्यास का एक प्रसिद्ध उदाहरण IRL है create-react-app, डिफ़ॉल्ट रूप से अन-बेक्ड बायलरप्लेट द्वारा यह सब कुछ में जगह बनाता है dependencies, इस धागे और इस उत्तर को देखें


7
आप पैकेज, यह सही है, लेकिन अगर आप कर रहे हैं, यह विकास बनाम क्रम और के साथ सब कुछ के साथ कोई संबंध नहीं है प्रकाशित नहीं कर रहे हैं तो क्या इस पैकेज के निर्माण के लिए आवश्यक है बनाम क्या इस पैकेज का उपयोग करने के लिए आवश्यक है
योगु

1
@Yogu इसीलिए मैंने पहली बार में अंतर किया, हाँ, मैं आपसे पूरी तरह सहमत हूँ
वैलेंटाइन

12
मैं इस सलाह से असहमत हूं। devDependenciesजब आप करते हैं npm install --production(या npm ci --production) स्थापित नहीं होते हैं और इस प्रकार उत्पादन कोड चलाते समय उपलब्ध नहीं होते हैं। यह सिर्फ एक पुस्तकालय के लिए नहीं बल्कि एक सेवा के लिए बहुत सार्थक अंतर है।
ब्रैड विल्सन

2
@ ब्रैडविलसन आपके पास एक बिंदु है, सूरज के नीचे कई एनपीएम वर्कफ़्लोज़ हैं, यदि आपके उपयोग के मामले में आपको भेद करने की आवश्यकता है, तो हर तरह से, यह करें। इस दुविधा के लिए अपना खुद का जवाब देने के लिए स्वतंत्र महसूस करें।
वैलेंटाइन

मैंने अन्य उपयोग के मामलों के अस्तित्व का उल्लेख करने के लिए अपना जवाब अपडेट किया है, जहां अंतर सार्थक हो सकता है और वास्तविक दुनिया के उदाहरण दिए जा सकते हैं। प्रतिक्रिया के लिए धन्यवाद!
वैलेंटाइन

15

उत्पादन के लिए Node.js एप्लिकेशन को तैनात करने के विशेष मामले में, कोई केवल एप्लिकेशन को चलाने के लिए आवश्यक निर्भरता स्थापित करना चाहता है।

npm install --production या

npm ci --production या

yarn --production

उस स्थिति में, प्रकार में होना चाहिए devDependencies, उन्हें स्थापना को फुलाने से रखने के लिए।

टिप्पणी: मुझे पता है कि ब्रैड विल्सन द्वारा एक अन्य उत्तर में टिप्पणी में इसका उल्लेख किया गया था। यह बिंदु एक उत्तर के योग्य लगता है, यद्यपि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.