मैं npm का उपयोग करके वर्तमान निर्देशिका में package.json निर्भरता कैसे स्थापित करूं


202

मेरे पास एक वेब ऐप है: fooapp । मेरी package.jsonजड़ में है। मैं एक विशिष्ट में सभी निर्भरताएं स्थापित करना चाहता हूं node_modules directory। मैं यह कैसे करु?

मैं क्या चाहता हूँ

कहते हैं कि मेरी दो widgetनिर्भरताएं हैं। मैं इस तरह एक निर्देशिका संरचना के साथ समाप्त करना चाहता हूं:

node_modules/
  widgetA
  widgetB
fooapp/
  package.js
  lib
  ..

जो मैं समझता हूं

जब मैं दौड़ता npm install fooapp/ हूँ तो मुझे यह मिलता है:

node_modules/
  fooapp/
    node_modules/
      widgetA
      widgetB
    package.js
    lib/
    ..
fooapp/
  package.js
  lib/
  ..

npm नोड_मॉड्यूल्स डीआर में मेरी ऐप निर्देशिका की एक प्रतिलिपि बनाता है और दूसरे नोड_मॉड्यूल्स निर्देशिका के अंदर पैकेज स्थापित करता है ।

मैं समझता हूं कि पैकेज स्थापित करने के लिए यह समझ में आता है। लेकिन मैं require()अपना वेब ऐप किसी और चीज़ के अंदर नहीं रखता, मैं इसे सीधे चलाता हूं। मैं एक विशिष्ट नोड_मॉड्यूल्स निर्देशिका में अपनी निर्भरता स्थापित करने का एक सरल तरीका ढूंढ रहा हूं।

जवाबों:


389

चल रहा है:

npm install

आपके एप्लिकेशन डायरेक्टरी के अंदर से (अर्थात जहाँ पैकेज। json स्थित है) आपके ऐप के लिए निर्भरताएँ स्थापित करेगा , बजाय इसे एक मॉड्यूल के रूप में स्थापित करने के, जैसा यहाँ वर्णित है । ये आपके package.json फ़ाइल के सापेक्ष ./node_modules में रखा जाएगा (यह वास्तव में इससे थोड़ा अधिक जटिल है, इसलिए यहां npm डॉक्स देखें )।

यदि आप चाहते हैं तो आप अपने ऐप के मूल dir में नोड_मॉड्यूल्स को स्थानांतरित करने के लिए स्वतंत्र हैं, क्योंकि नोड के 'आवश्यकता' तंत्र को यह समझता है। हालाँकि, यदि आप इंस्टॉल / अपडेट के साथ अपने ऐप की निर्भरता को अपडेट करना चाहते हैं, तो npm स्थानांतरित 'नोड_मॉड्यूल्स' को नहीं देखेगा और इसके बजाय एक नया डीआर बनाएगा, फिर से पैकेज.जोन के सापेक्ष।

इसे रोकने के लिए, बस अपने ऐप dir से स्थानांतरित नोड_मॉड्यूल्स के लिए एक सिमलिंक बनाएं:

ln -s ../node_modules node_modules

बहुत खुबस! मैं इसे आज़माता हूँ और इस उत्तर को स्वीकार करता हूँ जैसे कि यह काम करता है।
डैनियल बर्ड्सले

9
यह एक काम कर हल है उस के बावजूद, मुझे पता चला npm linkहै (देखें ऐसी स्थितियों जहाँ आप एक और निर्देशिका से हड़पने मॉड्यूल की जरूरत में और अधिक सुविधाजनक है stackoverflow.com/a/14387210/820520 )
melekes

14

मेरे मामले में मुझे करने की जरूरत है

sudo npm install  

मेरी परियोजना अंदर / var / www है, इसलिए मुझे भी उचित अनुमतियाँ सेट करने की आवश्यकता है।


15
npm स्थापित करने के लिए sudo की आवश्यकता नहीं हो सकती है।
एलन कू

2
उस उपयोगकर्ता के आधार पर जिसे js फ़ाइल और स्थापित निर्भरता को निष्पादित करने की आवश्यकता है, आप चला सकते हैं sudo -u [username] npm install। तथ्य के बाद पुनरावर्ती रूप से सिर्फ npm installऔर chownनोड_मॉड्यूल निर्देशिका के लिए बेहतर है।
TheLonelyGhost

5
जब तक आप उपयोग नहीं कर रहे हैं तब तक sudo के साथ npm को कभी न चलाएं -g- और फिर भी इसे संभालने के बेहतर तरीके हैं।
15

1
आप उत्तर के लिए धन्यवाद, लेकिन ऐसा क्यों है? क्या तुम समझा सकते हो? मेरा मतलब है, क्या होगा अगर मेरे पास एक परियोजना है जिसमें मैं चाहता हूं या रूट अनुमतियों के साथ एक फ़ोल्डर रखने और वहां -g के बिना निर्भरता स्थापित करने की आवश्यकता है? शायद वहाँ एक अच्छा कारण है, लेकिन मैं sudo npm स्थापित किया (बिना -g) कुछ बार और कभी कोई परेशानी नहीं हुई। चीयर्स!
aesede

1
@RredCat मैं इस तरह के सामान को करने के सही तरीके के बारे में सहमत हूं, लेकिन थोड़ी देर के बाद मैंने देखा कि यह चर्चा उबंटू की ओर पलायन कर रही है, ऐसा लगता है कि जिस तरह से यह कुछ अनुमतियों और फ़ोल्डरों का प्रबंधन करता है उसमें एक समस्या है, जो उपयोगकर्ताओं को उपयोग करने के लिए मजबूर कर रही है sudo npm। फिर, केवल उबंटू में।
aesede

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