आप Node.js(package.json) के लिए "devDependencies" एनपीएम मॉड्यूल स्थापित करने से कैसे रोकते हैं?
npm (8)
"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 एनपीएम इंस्टॉल - प्रोडक्शन का उपयोग करने का प्रयास करें
मेरे पास यह मेरे पैकेज.जेसन फ़ाइल में है (संक्षिप्त संस्करण):
{
"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
उपयोग से पहले इसे हटाना होगा।
चयनित उत्तर में जोड़ने की आवश्यकता है: अभी तक, पैकेज निर्देशिका में npm इंस्टॉल करें ( package.json
युक्त) devDependencies स्थापित करेगा, जबकि npm npm install -g
उन्हें इंस्टॉल नहीं करेगा।
नया विकल्प है:
npm install --only=prod
यदि आप केवल devDependencies स्थापित करना चाहते हैं:
npm install --only=dev
मैंने पाया है कि, एक नोड एडन युक्त पैकेज के लिए देव निर्भरताओं को स्थापित करने का प्रयास करते समय, आप 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 को स्थापित करने का कारण बन जाएगा।
यह उल्लेखनीय है कि आप एक ही परिणाम प्राप्त करने के लिए 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
उत्पादन
- डिफ़ॉल्ट: झूठा
टाइप करें: "उत्पादन" मोड में चलाने के लिए बूलियन सेट पर सही है।
- किसी भी तर्क के बिना स्थानीय एनपीएम इंस्टॉल करते समय devDependencies शीर्ष स्तर पर स्थापित नहीं होते हैं।
- जीवन चक्र स्क्रिप्ट के लिए 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
को विकास उद्देश्य के लिए संकुल जोड़ने के लिए उपयोग किया जाना चाहिए। टीडीडी पैकेज (चाई, मोचा, आदि) जोड़ने की तरह। जो विकास में उपयोग में नहीं बल्कि उत्पादन में उपयोग किया जाता है।