जवाबों:
से 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 install
npm-shrinkwrap.json
और package-lock.json
(इसी क्रम में)।node_modules
।package.json
या को लिख सकते हैं package-lock.json
।
npm i packagename
) यह package.json
निर्भरता को जोड़ने या अपडेट करने के लिए लिख सकता है ।npm i
) यह package-lock.json
कुछ निर्भरता के संस्करण को बंद करने के लिए लिख सकता है यदि वे पहले से ही इस फ़ाइल में नहीं हैं।npm ci
package-lock.json
या npm-shrinkwrap.json
उपस्थित होने की।package.json
।node_modules
और स्थापित करता है ।package.json
या package-lock.json
।जबकि npm ci
संपूर्ण निर्भरता ट्री से उत्पन्न होता है , package-lock.json
या निम्न एल्गोरिथम ( स्रोत ) का उपयोग करने की सामग्री को अपडेट करता है :npm-shrinkwrap.json
npm 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 install
whithout तर्क केवल संशोधित करेगा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 ci
npm 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 install
package.json को लिख सकते हैं। क्या आप जानते हैं कि यह यहाँ क्या लिख सकता है?