आप Node.js(package.json) के लिए "devDependencies" एनपीएम मॉड्यूल स्थापित करने से कैसे रोकते हैं?




npm (12)

"Npm install" का उपयोग करते समय मॉड्यूल लोड हो जाते हैं और आपके पूरे एप्लिकेशन में उपलब्ध होते हैं, भले ही वे "devdependencies" या "निर्भरता" हैं। इस विचार का योग: जो कुछ भी आपके package.json निर्भरता के रूप में परिभाषित करता है (किसी भी प्रकार) node_modules में स्थापित हो जाता है।

निर्भरताओं / devDependencies / वैकल्पिक निर्भरता के बीच अंतर का उद्देश्य यह है कि इन संसाधनों को स्थापित करने के लिए आपके कोड के उपभोक्ता w / npm कर सकते हैं।

दस्तावेज के अनुसार: https://npmjs.org/doc/json.html ...

अगर कोई आपके प्रोग्राम में अपने मॉड्यूल को डाउनलोड करने और उपयोग करने की योजना बना रहा है, तो संभवत: वे आपके द्वारा उपयोग किए जाने वाले बाहरी परीक्षण या दस्तावेज़ीकरण ढांचे को डाउनलोड या निर्माण करने की आवश्यकता नहीं है या नहीं।

इस मामले में, इन अतिरिक्त वस्तुओं को devdependencies हैश में सूचीबद्ध करना सबसे अच्छा है।

जब भी --dev कॉन्फ़िगरेशन ध्वज सेट किया जाता है, तो ये चीज़ें इंस्टॉल की जाएंगी। यह झंडा स्वचालित रूप से सेट होता है जब एनपीएम लिंक करते हैं या जब पैकेज के रूट से एनपीएम इंस्टॉल करते हैं, और किसी अन्य एनपीएम कॉन्फ़िगरेशन पैराम की तरह प्रबंधित किया जा सकता है। विषय पर अधिक के लिए कॉन्फ़िगर (1) देखें।

हालांकि, इस प्रश्न को हल करने के लिए, यदि आप केवल एनपीएम का उपयोग करके "निर्भरता" को स्थापित करना चाहते हैं, तो निम्न आदेश निम्न है:

npm install --production

यह गिट प्रतिबद्धता को देखकर पुष्टि की जा सकती है जिसने इस फ़िल्टर को जोड़ा है (इस कार्यक्षमता को प्रदान करने के लिए नीचे सूचीबद्ध कुछ अन्य फ़िल्टरों के साथ)।

वैकल्पिक फिल्टर जो एनपीएम द्वारा उपयोग किया जा सकता है:

--save          => updates dependencies entries in the {{{json}}} file
--force         => force fetching remote entries if they exist on disk 
--force-latest  => force latest version on conflict
--production    => do NOT install project devDependencies
--no-color      => do not print colors

@dmarr एनपीएम इंस्टॉल - प्रोडक्शन का उपयोग करने का प्रयास करें

https://code.i-harness.com

मेरे पास यह मेरे पैकेज.जेसन फ़ाइल में है (संक्षिप्त संस्करण):

{
  "name": "a-module",
  "version": "0.0.1",
  "dependencies": {
    "coffee-script":      ">= 1.1.3"
  },
  "devDependencies": {
    "stylus":             ">= 0.17.0"
  }
}

मैं मैक 10.6.8 पर एनपीएम संस्करण 1.1.1 का उपयोग कर रहा हूं।

जब मैं प्रोजेक्ट रूट से निम्न आदेश चलाता हूं, तो यह dependencies और devDependencies दोनों को स्थापित करता है:

npm install

मैं इस धारणा के तहत था कि इस आदेश ने devDependencies पर devDependencies :

npm install --dev

मैं इसे कैसे बना सकता हूं ताकि npm install केवल dependencies स्थापित करता dependencies (इसलिए उत्पादन वातावरण केवल उन मॉड्यूल को प्राप्त करता है), जबकि npm install --dev जैसे कुछ dependencies और devDependencies दोनों स्थापित करता है?


अब एक समस्या है, अगर आपके पास npm 5+ के साथ package-lock.json है। आपको npm install --production उपयोग से पहले इसे हटाना होगा।


एनपीएम एक पैकेज के अंदर से स्थापित करते समय देव निर्भरता स्थापित करेगा (यदि वर्तमान निर्देशिका में कोई package.json है)। यदि यह किसी अन्य स्थान से है (एनपीएम रजिस्ट्री, गिट रेपो, फाइल सिस्टम पर अलग-अलग स्थान) यह केवल निर्भरताओं को स्थापित करता है।


चयनित उत्तर में जोड़ने की आवश्यकता है: अभी तक, पैकेज निर्देशिका में npm इंस्टॉल करें ( package.json युक्त) devDependencies स्थापित करेगा, जबकि npm npm install -g उन्हें इंस्टॉल नहीं करेगा।


नया विकल्प है:

npm install --only=prod

यदि आप केवल devDependencies स्थापित करना चाहते हैं:

npm install --only=dev

मैं भी उस समस्या में भाग गया! एनपीएम इंस्टॉल कुछ हद तक भ्रमित है और वेब पोस्ट-डी / - डीवी झंडे में आते रहते हैं जैसे कि एक स्पष्ट 'विकास' स्थापित मोड है।

  • एनपीएम इंस्टॉल दोनों " निर्भरता " और " devDependencies " स्थापित करेगा

  • एनपीएम इंस्टॉल - प्रोडक्शन केवल " निर्भरता " स्थापित करेगा

  • npm install --dev केवल " devDependencies " स्थापित करेगा


मैंने पाया है कि, एक नोड एडन युक्त पैकेज के लिए देव निर्भरताओं को स्थापित करने का प्रयास करते समय, आप npm install --dev चलाते समय एडन बनाने से बच नहीं सकते हैं, भले ही आप केवल devDependencies को स्थापित करना चाहते हैं। तो, मुझे एनपीएम की पीठ के आसपास जाना पड़ा:

node -e 'console.log( Object.keys( require( "./package.json" ).devDependencies ) );' | \
sed  -e "s/^[^']*'//" -e "s/'.*$//" | \
xargs npm install

या, बेहतर (और अधिक संक्षेप में) अभी तक,

node -e 'Object.keys( require( "./package.json" ).devDependencies )
.map( function( item ){ console.log( item ) } );' | xargs npm install

यदि आप 2016 में इस पोस्ट को पढ़ते हैं, तो कृपया जो भी आप चाहते हैं उसे प्राप्त करें

--only={prod[uction]|dev[elopment]} 

तर्क NODE_ENV के बावजूद केवल devDependencies या केवल non-devDependencies को स्थापित करने का कारण बन जाएगा।

से: https://docs.npmjs.com/cli/install


यदि आप पहले से ही अपनी सभी निर्भरताओं को स्थापित कर चुके हैं, और आप अपने उत्पादन पैकेज को एनपीएम से फिर से डाउनलोड करने से बचना चाहते हैं, तो आप बस टाइप कर सकते हैं:

npm prune --production

यह आपके node_modules निर्भरता को आपके node_modules फ़ोल्डर से हटा देगा, जो उपयोगी है यदि आप दो चरण प्रक्रिया स्वचालित करने की कोशिश कर रहे हैं

  1. देव निर्भरता का उपयोग कर, मेरी परियोजना वेबपैक
  2. केवल उत्पादन मॉड्यूल का उपयोग करके एक डॉकर छवि बनाएं

बीच में npm prune चलाना आपको सब कुछ पुनर्स्थापित करने से बचाएगा!


यह उल्लेखनीय है कि आप एक ही परिणाम प्राप्त करने के लिए NODE_ENV पर्यावरण चर का उपयोग कर सकते हैं। विशेष रूप से उपयोगी यदि आप अपने नोड एप्लिकेशन (जैसे डॉकर) को कंटेनर कर रहे हैं।

NODE_ENV=production npm install

उपर्युक्त कोड आपकी सभी निर्भरताओं को स्थापित करेगा लेकिन देव (यानी devDependencies )।

यदि आपको अपने Dockerfile में पर्यावरण चर का उपयोग करने की आवश्यकता है तो अधिक जानकारी here मिल सकती here

जब भी आवश्यक हो, पर्यावरण चर को ओवरराइट करना आसान होता है (उदाहरण के लिए यदि आप ट्रेविस सीआई पर अपना टेस्ट सूट कहना चाहते हैं)। अगर ऐसा होता तो आप ऐसा कुछ कर सकते थे:

docker run -v $(pwd):/usr/src/app --rm -it -e NODE_ENV=production node:8 npm install

यहां एनपीएम दस्तावेज़ीकरण

उत्पादन

  • डिफ़ॉल्ट: झूठा
  • टाइप करें: "उत्पादन" मोड में चलाने के लिए बूलियन सेट पर सही है।

    1. किसी भी तर्क के बिना स्थानीय एनपीएम इंस्टॉल करते समय devDependencies शीर्ष स्तर पर स्थापित नहीं होते हैं।
    2. जीवन चक्र स्क्रिप्ट के लिए NODE_ENV = "उत्पादन" सेट करें।

हैप्पी कंटेनरेशन =)


npm install packageName --save पैकेज का उपयोग करें npm install packageName --save यह निर्भरता में पैकेज जोड़ देगा, अगर आप npm install packageName --save-dev पैकेज का उपयोग करते हैं npm install packageName --save-dev तो यह devDependencies

npm install packageName --save-dev को विकास उद्देश्य के लिए संकुल जोड़ने के लिए उपयोग किया जाना चाहिए। टीडीडी पैकेज (चाई, मोचा, आदि) जोड़ने की तरह। जो विकास में उपयोग में नहीं बल्कि उत्पादन में उपयोग किया जाता है।


npm install कमांड एक विकास निर्देशिका (डिफ़ॉल्ट) में, पैकेज निर्देशिका के अंदर चलाते समय अन्य dependencies साथ devDependencies स्थापित करेगा। इसके आस-पास पहुंचने के लिए, npm install --production उपयोग करें या production में NODE_ENV पर्यावरण चर सेट करें।

यहां कुछ और जानकारी दी गई है।

संपादित करें:

एनपीएम के v3.3.0 (2015-08-13) के रूप में, npm install --production का उपयोग करके एक चेतावनी फेंक दी जाएगी:

- --production विकल्प का उपयोग बहिष्कृत किया गया है। इसके बजाय - --only=production उपयोग करें।

NODE_ENV पर्यावरण चर के मान के बावजूद, केवल dependencies को स्थापित npm install --only=production का उपयोग करें, और devDependencies, नहीं।

संदर्भ: एनपीएम दस्तावेज़ | एनपीएम चेंजलॉग







npm