जवाबों:
से NPM डॉक्स :
संक्षेप में, npm स्थापित और npm ci का उपयोग करने के बीच मुख्य अंतर हैं:
- परियोजना में एक मौजूदा पैकेज-लॉक.जॉन या एनपीएम-सिक्योरव्रेप.जॉन होना चाहिए।
- यदि पैकेज लॉक की निर्भरता पैकेज में उन लोगों से मेल नहीं खाती है। पैकेज लॉक को अपडेट करने के बजाय, npm ci एक त्रुटि के साथ बाहर निकल जाएगा।
- npm ci एक समय में केवल संपूर्ण प्रोजेक्ट स्थापित कर सकता है: इस निर्भरता के साथ व्यक्तिगत निर्भरता नहीं जोड़ी जा सकती है।
- यदि एक नोड_मॉड्यूल्स पहले से मौजूद है, तो यह एनपीएमआई स्थापित होने से पहले स्वचालित रूप से हटा दिया जाएगा।
- यह कभी भी package.json या किसी भी पैकेज-ताले को नहीं लिखेगा: इंस्टॉल अनिवार्य रूप से जमे हुए हैं।
अनिवार्य रूप से,
निर्भरता की एक सूची बनाने के लिए npm installपढ़ता package.jsonहै और package-lock.jsonइन निर्भरता के कौन से संस्करण को स्थापित करने के लिए सूचित करने के लिए उपयोग करता है। अगर इसमें निर्भरता नहीं है, तो package-lock.jsonइसे जोड़ दिया जाएगाnpm install ।
npm ci( सी ontinuous I ntegration के नाम पर) सीधे निर्भरता स्थापित करता है package-lock.jsonऔर package.jsonकेवल यह पुष्टि करने के लिए उपयोग करता है कि कोई बेमेल संस्करण नहीं हैं। यदि कोई निर्भरता गायब है या असंगत संस्करण हैं, तो यह एक त्रुटि फेंक देगा ।
npm installएक परियोजना पर नई निर्भरता जोड़ने के लिए और निर्भरता को अपडेट करने के लिए उपयोग करें । आमतौर पर, आप विकास के दौरान इसका उपयोग उन परिवर्तनों को खींचने के बाद करते हैं जो निर्भरता की सूची को अपडेट करते हैं लेकिन npm ciइस मामले में उपयोग करना एक अच्छा विचार हो सकता है ।
npm ciयदि आपको एक निर्धारक, दोहराने योग्य निर्माण की आवश्यकता है, तो उपयोग करें । उदाहरण के लिए, निरंतर एकीकरण, स्वचालित नौकरियों आदि के दौरान और इसके बजाय पहली बार निर्भरता स्थापित करते समय npm install।
npm installnpm-shrinkwrap.jsonऔर package-lock.json(इसी क्रम में)।node_modules।package.jsonया को लिख सकते हैं package-lock.json।
npm i packagename) यह package.jsonनिर्भरता को जोड़ने या अपडेट करने के लिए लिख सकता है ।npm i) यह package-lock.jsonकुछ निर्भरता के संस्करण को बंद करने के लिए लिख सकता है यदि वे पहले से ही इस फ़ाइल में नहीं हैं।npm cipackage-lock.jsonया npm-shrinkwrap.jsonउपस्थित होने की।package.json।node_modulesऔर स्थापित करता है ।package.jsonया package-lock.json।जबकि npm ciसंपूर्ण निर्भरता ट्री से उत्पन्न होता है , package-lock.jsonया निम्न एल्गोरिथम ( स्रोत ) का उपयोग करने की सामग्री को अपडेट करता है :npm-shrinkwrap.jsonnpm install node_modules
load the existing node_modules tree from disk clone the tree fetch the package.json and assorted metadata and add it to the clone walk the clone and add any missing dependencies dependencies will be added as close to the top as is possible without breaking any other modules compare the original tree with the cloned tree and make a list of actions to take to convert one to the other execute all of the actions, deepest first kinds of actions are install, update, remove and move
npm install packageदोनों को संशोधित कर सकता है package-lock.json और package.json , जबकि npm installwhithout तर्क केवल संशोधित करेगाpackage-lock.json
npm ciकिसी भी मौजूदा नोड_मॉडल फ़ोल्डर को हटा देगा और package-lock.jsonप्रत्येक पैकेज के विशिष्ट संस्करण को स्थापित करने के लिए फ़ाइल पर निर्भर करेगा। यह npm स्थापित की तुलना में काफी तेज है क्योंकि यह कुछ सुविधाओं को छोड़ देता है। यह साफ राज्य स्थापित है ci / cd पाइपलाइनों और डॉक बिल्ड के लिए बहुत अच्छा है! आप इसका उपयोग एक साथ सब कुछ स्थापित करने के लिए भी करते हैं और विशिष्ट पैकेजों में नहीं।
आपके द्वारा लिंक किए गए दस्तावेज़ में सारांश था:
संक्षेप में, npm स्थापित और npm ci का उपयोग करने के बीच मुख्य अंतर हैं:
- परियोजना में एक मौजूदा पैकेज-लॉक.जॉन या एनपीएम-सिक्योरव्रेप.जॉन होना चाहिए।
- यदि पैकेज लॉक की निर्भरता पैकेज में उन लोगों से मेल नहीं खाती है। पैकेज लॉक को अपडेट करने के बजाय, npm ci एक त्रुटि के साथ बाहर निकल जाएगा।
- npm ci एक समय में केवल संपूर्ण प्रोजेक्ट स्थापित कर सकता है: इस निर्भरता के साथ व्यक्तिगत निर्भरता नहीं जोड़ी जा सकती है।
- यदि एक नोड_मॉड्यूल्स पहले से मौजूद है, तो यह एनपीएमआई स्थापित होने से पहले स्वचालित रूप से हटा दिया जाएगा।
- यह कभी भी package.json या किसी भी पैकेज-ताले को नहीं लिखेगा: इंस्टॉल अनिवार्य रूप से जमे हुए हैं।
कमांड्स कार्यक्षमता में बहुत समान हैं लेकिन अंतर आपके package.jsonऔर package-lock.jsonफाइलों में निर्दिष्ट निर्भरता को स्थापित करने के लिए उठाए गए दृष्टिकोण में है ।
npm cinpm installयदि आपके सिस्टम पर पहले से मौजूद हैं, तो अपने ऐप की सभी निर्भरताओं की एक साफ स्थापना करता है। एक समस्या उत्पन्न हो सकती है यदि सिस्टम पर पहले से इंस्टॉल किया गया संस्करण आपके package.jsonइंस्टाॅल को स्थापित करने का उद्देश्य नहीं है अर्थात स्थापित संस्करण ' आवश्यक ' संस्करण से भिन्न है ।
अन्य अंतर यह होगा कि npm ciआपकी package*.jsonफ़ाइलों को कभी नहीं छूता है। यह स्थापना को रोक देगा और एक त्रुटि दिखाएगा यदि निर्भरता संस्करण में package.jsonऔर package-lock.jsonफ़ाइलों में मेल नहीं खाते हैं ।
आप आधिकारिक डॉक्स से बहुत बेहतर स्पष्टीकरण यहां पढ़ सकते हैं ।
इसके अतिरिक्त, आप यहां पैकेज लॉक के बारे में पढ़ना चाह सकते हैं ।
यह ध्यान में रखने योग्य है कि अल्पाइन जैसी हल्की नोड डॉकटर छवियों में पायथन स्थापित नहीं है जो कि एक निर्भरता है node-gypजिसका उपयोग किया जाता है npm ci।
मुझे लगता है कि यह थोड़ा सा माना जाता है कि npm ciकाम करने के लिए आपको अपने निर्माण में निर्भरता के रूप में पायथन को स्थापित करने की आवश्यकता है।
अधिक जानकारी यहाँ डॉकटर और npm - जिप ERR! ठीक नहीं है
आपको उन्हें विभिन्न स्थितियों में उपयोग करना चाहिए।
npm installजब आप node_modulesनिर्देशिका को कैश करना चाहते हैं तो विकास के लिए और CI में बहुत अच्छा है । इसका उपयोग कब करें? आप ऐसा कर सकते हैं यदि आप अन्य लोगों के उपयोग के लिए एक पैकेज बना रहे हैं (आप node_modulesऐसी रिलीज़ में शामिल नहीं हैं ) । कैशिंग के बारे में, सावधान रहें, अगर आप Node.jsयाद रखने के विभिन्न संस्करणों का समर्थन करने की योजना बनाते हैं, node_modulesजो Node.jsरनवे की आवश्यकताओं के बीच अंतर के कारण पुनः स्थापित करना पड़ सकता है । यदि आप एक संस्करण से चिपके रहना चाहते हैं, तो नवीनतम से चिपके रहें LTS।
npm ciजब आप किसी प्रोडक्शन एप्लिकेशन (एक अंतिम उत्पाद, अन्य पैकेजों द्वारा उपयोग नहीं किया जा सके) का परीक्षण और रिलीज करने के लिए उपयोग किया जाना चाहिए क्योंकि यह महत्वपूर्ण है कि आपके पास इंस्टॉलेशन जितना संभव हो उतना निर्धारित हो, यह इंस्टॉल अधिक समय लगेगा लेकिन अंततः बना देगा आपका एप्लिकेशन अधिक विश्वसनीय है (आप node_modulesऐसी रिलीज़ में शामिल होते हैं) । के LTSसंस्करण के साथ छड़ी Node.js।
बोनस: आप उन्हें मिश्रित कर सकते हैं कि आप इसे कितना जटिल बनाना चाहते हैं। gitआप में सुविधा शाखाओं पर node_modulesअपनी टीमों की उत्पादकता बढ़ाने के लिए कैश कर सकते हैं और मर्ज के अनुरोध पर और मास्टर शाखाओं npm ciएक निर्धारक परिणाम के लिए भरोसा करते हैं ।
npm installpackage.json को लिख सकते हैं। क्या आप जानते हैं कि यह यहाँ क्या लिख सकता है?