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


587

मेरे पास मेरे पैकेज में यह है। Json फ़ाइल (छोटा संस्करण):

{
  "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:

npm install --dev

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


1
डॉक्टर के अनुसार, आप सही हैं, - देव भक्तों को स्थापित करता है, अन्यथा, केवल डिप्स। npmjs.org/doc/json.html । मैं जानता हूं कि नामित पैकेजों के लिए यह काम करता है, कम से कम।
mna

1
यदि आप 2015 में इस प्रश्न के पार आते हैं, तो -save-dev स्विच ठीक उसी तरह करता है जैसा कि इस प्रश्न में पूछा गया है।
आनंद

1
यह उत्तर stackoverflow.com/a/22004559/3718119dependencies और devDependenciesउनमें से प्रत्येक के उपयोग के बीच के अंतर को एक अच्छी व्याख्या देता है।
क्वासॉफ्ट

जवाबों:


844

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

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

स्रोत: एनपीएम डॉक्स

नोट: n3 (2015-08-13) के v3.3.0 से पहले, विकल्प को बुलाया गया था --production, अर्थात npm install --production


2
एजेट का तर्क शायद भक्ति पर निर्भरता को दूर करना है ताकि आपके पैकेज को स्थापित करने वाले उपभोक्ताओं को npm install yourpackage.tgzभी निर्भरता न मिले। हालाँकि, यह पहले से ही मामला है। नीचे केविन कॉक्स का जवाब देखें ( stackoverflow.com/a/15826602/825588 )।
जोहान

5
npmjs.org/doc/cli/npm-install.html "डिफ़ॉल्ट रूप से, npm इंस्टॉल सभी मॉड्यूल को निर्भरता के रूप में स्थापित करेगा। --production ध्वज के साथ, npm devDependencies में सूचीबद्ध मॉड्यूल स्थापित नहीं करेगा।"
टॉमबियर

14
हे भगवान। मेरे पास पूरी तरह NODE_ENV=productionसे कुछ और था जो मैं कर रहा था और मेरे जीवन के लिए यह पता नहीं लगा सका कि npm installनिर्भरता क्यों स्थापित नहीं होगी। पूरी तरह से उत्तर के लिए धन्यवाद।
aendrew

1
npm install --dev केवल देव निर्भरता स्थापित करेगा
रुस्तम के

10
Npm 3.3 और उसके बाद के लिए: npm WARN इंस्टॉल --devविकल्प का उपयोग पदावनत है। --only=devइसके बजाय उपयोग करें ।
srcspider

232

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

  • npm installदोनों "स्थापित हो जाएगा निर्भरता " और " devDependencies "

  • npm install --productionकेवल " निर्भरता " स्थापित करेगा

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


29
चेतावनी: यदि आप इसके NODE_ENVलिए तैयार हैं productionऔर आप npm installइसे चलाते हैं तो यह निर्भरता स्थापित नहीं करेगा। मैं इस मुद्दे पर अपने डॉकरफाइल में भाग गया।
वघन

1
@ जुगान मैं इसमें भी दौड़ चुका हूँ, दौड़कर हल किया जा सकता है npm --production=false install(हालाँकि यह निश्चित नहीं है कि अगर यह --देव ध्वज के साथ काम करेगा)
बेवेल

138

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

npm install --only=prod

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

npm install --only=dev

1
यह प्रश्न के विपरीत उत्तर देता है। ओपी पूछ रहा है कि कैसे निर्भरता स्थापित करने के लिए नहीं।
Musicin3d

2
आप आंशिक रूप से सही हैं @ musicin3d, यही कारण है कि पहले भाग पर मैंने जवाब दिया कि कैसे उत्पादों को केवल निर्भरता स्थापित करना है और दूसरे भाग में केवल निर्भरता के लिए देव को कैसे स्थापित करना है।
19

5
सुनो। मैंने उस टिप्पणी को पहले छोड़ दिया @ user1614572 के बारे में भाग जोड़ा --only=prod। आप, श्रीमान, आंशिक रूप से सही हैं। ; पी
संगीत 3 डी

क्या हम तैनाती के लिए अलग निर्भरता शामिल कर सकते हैं?
जीव जसब

1
यह एक टिप्पणी है, एक जवाब नहीं है। मैं समय-समय पर अपनी सभी टिप्पणियों की जाँच नहीं करता। मैंने कभी नहीं देखा कि लोग सालों पहले की टिप्पणियों को अपडेट करते हैं । आप मूल रूप से आलोचना करने के लिए यहां आए थे कि मैंने अपनी टिप्पणी पर एक साल लगा दिया। मैं आगे जवाब नहीं दूंगा। अन्य लोगों को मज़ेदार ट्रोलिंग दें।
जैक्स Jac ッ 19 19

47

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

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

तर्क NODE_ENV की परवाह किए बिना या तो केवल निर्भरता या केवल गैर-निर्भरताएं स्थापित करने का कारण होगा।

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


"POST" को बड़ा क्यों करें? docs.npmjs.com/cli/install स्पष्ट रूप से दस्तावेज़ BOTH --productionऔर --only={prod[uction]|dev[elopment]}
डेन डैस्कलेस्क्यू

32

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

npm prune --production

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

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

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


19

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

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

प्रलेखन के अनुसार: https://npmjs.org/doc/json.html ...

यदि कोई आपके प्रोग्राम में आपके मॉड्यूल को डाउनलोड करने और उसका उपयोग करने की योजना बना रहा है, तो वे शायद बाहरी परीक्षण या प्रलेखन फ्रेमवर्क को डाउनलोड या बनाने की आवश्यकता नहीं है जो आप उपयोग करते हैं।

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

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

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

npm install --production

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

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

--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

@ mpm npm install --production का उपयोग करके देखें


16

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


क्या आप सुधार कर सकते हैं? मुझे लगता है कि आपने अपने कोष्ठक में एक गलती की है, मुझे लगता है कि आप इसे पहले बंद करना भूल गए थे और आपका फ्रेज़ मुझे (गैर-देशी अंग्रेजी स्पीकर) बहुत मायने नहीं रखता। रोहन सिंह जवाब के तहत जोहान की टिप्पणी ने मुझे आपके उत्तर की ओर देखने के लिए कहा (क्योंकि मेरा संदेह बिल्कुल वैसा ही था जैसा कि एगेट का संदेह था), और कोई सफलता नहीं। मुझे अभी भी यह नहीं मिलता है कि कैसे npm install some-moduleदेव निर्भरता स्थापित नहीं होगी some-module
राफेल Eyng

धन्यवाद, निश्चित। हालाँकि मुझे आपके बाकी सवाल समझ में नहीं आते हैं।
केविन कॉक्स

3

मैंने पाया है कि, जब एक नोड एडऑन वाले पैकेज के लिए देव निर्भरताएं स्थापित करने की कोशिश की जाती है, तो आप npm install --dev चलाते समय एडऑन के निर्माण से बच नहीं सकते हैं, भले ही आप सिर्फ डिडिपेंडेंसी स्थापित करना चाहते हों। इसलिए, मुझे एनपीएम के पीछे जाना था:

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

3

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

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


ओपी के पास एक निर्भरता को बचाने वाला मुद्दा नहीं है, package.jsonलेकिन एक बार ये निर्भरताएं पहले से ही बच जाती हैं , तो npmकेवल एक विशिष्ट प्रकार की निर्भरता को स्थापित करने के लिए कैसे बाध्य किया जाए। जब मैंने आपके उत्तर को यहाँ पढ़ा, तो मैंने कुछ भी नहीं सीखा जो ओपी द्वारा हल की गई समस्या को हल करने में मदद करता है।
लुई

3

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

NODE_ENV=production npm install

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

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

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

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

एनपीएम प्रलेखन यहाँ

उत्पादन

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

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

खुश कंटेनर =)


3

मैं उपयोग करने का सुझाव देता हूं npm ci। यदि आप केवल उत्पादन-आवश्यक पैकेज स्थापित करना चाहते हैं (जैसा कि आपने लिखा है - बिना devDependencies) तो:

npm ci --only=production

या

NODE_ENV=production npm ci

यदि आप oldschool पसंद करते हैं npm installतो:

npm install --production

या

NODE_ENV=production npm install

यहां अच्छा जवाब है कि आपको क्यों उपयोग करना चाहिए npm ci


कूल, यह काम करता है साथ npm ciही नहीं npm install!
क्लेसुन

2

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


7
हां, -gस्थापित नहीं होगा devDependencies, लेकिन यह विश्व स्तर पर संकुल को स्थापित करता है, जो अक्सर अपेक्षित परिणाम नहीं होता है।
बाड़ी हार्बरो जूल

0

npm install --productionनोड मॉड्यूल स्थापित करने का सही तरीका है जो उत्पादन के लिए आवश्यक है। अधिक विवरण के लिए दस्तावेज की जांच करें


-1

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


-1
npm install --dev will install dev dependencies

और, केवल निर्भरता स्थापित करने के लिए प्रश्न के अनुसार, निम्नलिखित कमांड मदद करेगा

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