Npm पैकेज की स्थानीय स्थापना के लिए कस्टम स्थान कैसे सेट करें?


177

क्या npm installकमांड फ्लैग या पर्यावरण चर के माध्यम से या तो कस्टम पैकेज गंतव्य निर्दिष्ट करना संभव है ?

डिफ़ॉल्ट रूप से, एनपीएम स्थानीय इंस्टॉल node_modulesवर्तमान निर्देशिका के भीतर समाप्त हो जाती है, लेकिन मैं चाहता हूं कि यह node_modulesएक अलग निर्देशिका में स्थापित हो , उदाहरण के लिए vendor/node_modules। मैं ऐसा कैसे कर सकता हूं?


आप क्या खत्म करने की कोशिश कर रहे हैं? इस पर यहाँ चर्चा की गई है: stackoverflow.com/questions/13668097/…
पास्कल बेलोनकल

10
@PascalBelloncle: पैकेज को उपनिर्देशिका में स्थापित करने के बजाय ./node_modules, मैं चाहता हूं कि npm उन्हें उपनिर्देशिका में स्थापित करे ./vendor/node_modules। (या कहा जा सकता है कि यह विन्यास योग्य नहीं है।)
पीजे

1
मैं समझ गया कि आप वही करना चाहते हैं, जो मुझे नहीं लगता कि यह संभव है। इसके अलावा आवश्यकता या तो काम नहीं करेगा। तो मैं पूछ रहा था कि आप ऐसा क्यों करना चाहते हैं। हो सकता है कि आप जो चाहते हैं वह करने के लिए एक वैकल्पिक समाधान हो।
पास्कल बेलोनकल

1
मैं पूरी तरह से इसके बाइनरी के लिए एक पैकेज स्थापित कर रहा हूं (अर्थात इसका उपयोग केवल कमांड लाइन पर किया जाएगा और कभी भी requireडी नहीं होगा ) लेकिन मैं इसे विश्व स्तर पर स्थापित नहीं करना चाहता।
pje

समझा। मेरा सुझाव तब नीचे देखें।
पास्कल बेलोनकल

जवाबों:


180

टी एल; डॉ

आप --prefixध्वज और --global* ध्वज का उपयोग करके ऐसा कर सकते हैं ।

pje@friendbear:~/foo $ npm install bower -g --prefix ./vendor/node_modules
bower@0.7.0 /Users/pje/foo/vendor/node_modules/bower

* भले ही यह एक "वैश्विक" स्थापना है, स्थापित डिब्बे कमांड लाइन के माध्यम से सुलभ नहीं होंगे जब तक कि ~/foo/vendor/node_modulesमौजूद नहीं है PATH

टी एल; आर

प्रत्येक विन्यास योग्य विशेषता npmको छह अलग-अलग स्थानों में से किसी में भी सेट किया जा सकता है। प्राथमिकता के क्रम में:

  • कमांड-लाइन झंडे: --prefix ./vendor/node_modules
  • पर्यावरण चर: NPM_CONFIG_PREFIX=./vendor/node_modules
  • उपयोगकर्ता कॉन्फ़िगरेशन फ़ाइल: $HOME/.npmrcया userconfigपरम
  • ग्लोबल कॉन्फिग फाइल: $PREFIX/etc/npmrcया userconfigपरम
  • अंतर्निहित कॉन्फ़िगरेशन फ़ाइल: path/to/npm/itself/npmrc
  • डिफ़ॉल्ट विन्यास: नोड_मॉड्यूल्स / एनपीएमकेएनएफ / कॉन्फिग-डिफेसेज

डिफ़ॉल्ट रूप से, स्थानीय रूप से स्थापित पैकेज में जाते हैं ./node_modules। वैश्विक लोग prefixचर चर ( /usr/localडिफ़ॉल्ट रूप से) में जाते हैं।

आप npm config listअपने वर्तमान कॉन्फ़िगरेशन को देखने और npm config editइसे बदलने के लिए चला सकते हैं ।

पुनश्च

सामान्य तौर पर, npmप्रलेखन वास्तव में मददगार होता है। फ़ोल्डरों अनुभाग NPM का एक अच्छा संरचनात्मक सिंहावलोकन है और config अनुभाग इस सवाल का जवाब देता है।


2
मैं परीक्षण के रूप में, उपरोक्त आदेश का पालन वास्तव में है, यह में स्थापित किया जाएगा ./vendor/node_modules/lib/bowerका उपयोग करnpm#3.8.0
ई-बादल

2
ऐसा करते समय, मुझे त्रुटि हो रही हैNo version provided in package.json
FooBar

आप लिखते हैं bins won't be accessible through the command line। कार्यक्रम को निश्चित रूप से पूरा पथ npm install eslint@3.4.0 -g --prefix c:\my_npm` calling c: \ my_npm \ eslint --fix my.js`
बर्नहार्ड

13
क्या package.json फ़ाइल के साथ कुछ समान हासिल करना संभव है? यानी अगर मैं npm installपैकेज ए.जेसन फ़ाइल के साथ निर्देशिका ए में चलाता हूं , तो पैकेज बी निर्देशिका में स्थापित किए जाएंगे। ऐसा लगता है कि यह समाधान व्यक्तिगत पैकेज स्थापित होने के लिए है।
रयान-नील मेस

1
क्या इस पद्धति का उपयोग करके सभी निर्भरताएं स्थापित करने का कोई तरीका है? npm installस्थानीय स्तर पर निर्भरता स्थापित करता है। npm install X -g -prefix "..."मॉड्यूल X को उपसर्ग में npm install -g -prefix "..."स्थापित करता है, वर्तमान पैकेज को उपसर्ग में स्थापित करता है।
अन्नपूर्णे

28

यदि आप इसे विन्यास में चाहते हैं, तो आप npm विन्यास को इस तरह सेट कर सकते हैं:

npm config set prefix "$(pwd)/vendor/node_modules"

या

npm config set prefix "$HOME/vendor/node_modules"

के साथ अपने विन्यास की जाँच करें

npm config ls -l

या जैसा @pje कहता है और --prefixध्वज का उपयोग करता है


4
मेरा मानना ​​है कि यह वैश्विक उपसर्ग सेट करता है? तो npm installअभी भी स्थानीय रूप से स्थापित हो जाएगा, ./node_modulesलेकिन npm install -gकरने के लिए स्थापित हो जाएगा "$(pwd)/vendor/node_modules"। मैं सेटिंग्स की कल्पना कर सकता हूं फिर इसके बारे में भूल सकता हूं, बाद में वापस आकर सोच सकता हूं कि मेरे वैश्विक पैकेज अजीब तरह से क्यों काम कर रहे हैं।
अन्नपूर्णय

13

OSX के लिए, आप अपने उपयोगकर्ता $HOME(शायद / उपयोगकर्ता / आपका नाम /) पर जा सकते हैं और यदि यह पहले से मौजूद नहीं है, तो एक .npmrcफ़ाइल (एक फ़ाइल जो npm उपयोगकर्ता कॉन्फ़िगरेशन के लिए उपयोग करता है) बनाएं, और अपने npm संकुल के लिए एक निर्देशिका बनाएं। में स्थापित किया जा सकता है (जैसे, / उपयोगकर्ता / आपका नाम / npm)। उस .npmrc फ़ाइल में, अपनी नई npm निर्देशिका के लिए "उपसर्ग" सेट करें, जो कि जहां "विश्व स्तर पर" स्थापित npm संकुल स्थापित किया जाएगा; ये "वैश्विक" पैकेज, जाहिर है, केवल आपके उपयोगकर्ता खाते के लिए उपलब्ध होंगे।

.Npmrc में:

prefix=${HOME}/npm

फिर कमांड लाइन से इस कमांड को चलाएं:

npm config ls -l

इसे अपने स्वयं के स्थानीय कॉन्फ़िगरेशन और वैश्विक npm कॉन्फ़िगरेशन दोनों पर आउटपुट देना चाहिए, और आपको अपने स्थानीय उपसर्ग कॉन्फ़िगरेशन को प्रतिबिंबित करना चाहिए, संभवतः आउटपुट की लंबी सूची के शीर्ष के पास।

सुरक्षा के लिए, मैं इस दृष्टिकोण की अनुशंसा करता हूं कि आपके उपयोगकर्ता खाते के npm व्यवहार को आपके /usr/localफ़ोल्डर्स को चेंज-इन करने के लिए कॉन्फ़िगर किया जाए, जिसे मैंने अन्यत्र अनुशंसित देखा है।


9

उदाहरण के लिए विंडोज 7 पर, कमांड / ऑपरेशन के निम्नलिखित सेट का उपयोग किया जा सकता है।

एक व्यक्तिगत वातावरण चर बनाएं, डबल बैकस्लैश अनिवार्य हैं:

  • चर का नाम: %NPM_HOME%
  • परिवर्तनीय मूल्य: C:\\SomeFolder\\SubFolder\\

अब, नए फ़ोल्डर के लिए कॉन्फ़िगर मान सेट करें (परीक्षा फ़ाइल नाम):

  • Npm फ़ोल्डर सेट करें

npm config set prefix "%NPM_HOME%\\npm"

  • Npm-cache फ़ोल्डर सेट करें

npm config set cache "%NPM_HOME%\\npm-cache"

  • Npm अस्थायी फ़ोल्डर सेट करें

npm config set tmp "%NPM_HOME%\\temp"

वैकल्पिक रूप से, आप मूल फ़ोल्डरों की सामग्री को शुद्ध कर सकते हैं कॉन्फ़िगरेशन बदलने से पहले

  • Npm-cache हटाएं npm cache clear

  • Npm मॉड्यूल को सूचीबद्ध करें npm -g ls

  • एनपीएम मॉड्यूल हटाएं npm -g rm name_of_package1 name_of_package2


1
धन्यवाद, मैं चरणों का पालन करता हूं। लेकिन यह c: /% NPM_HOME% / npm, इत्यादि के बजाय c: / npm_home / npm
Jay

6

खुद के लिए खोज करने के बाद साझा निर्भरता के साथ कई परियोजनाएं चाहते हैं DRYer, मैंने पाया है:

  • स्थानीय रूप से इंस्टॉल करना आपके द्वारा उपयोग की जाने वाली किसी भी चीज़ के लिए नोड तरीका है require()
  • विश्व स्तर पर स्थापित आप अपने रास्ते में चाहते हैं बायनेरी के लिए है, लेकिन के माध्यम से कुछ भी करने के लिए इरादा नहीं है require()
  • उपसर्ग का उपयोग करने का मतलब है कि आपको उपयुक्त binऔर manपथ जोड़ने होंगे$PATH
  • npm link( जानकारी ) आपको ग्लोबल्स के स्रोत के रूप में स्थानीय इंस्टॉल का उपयोग करने देता है

→ नोड तरीके से चिपके रहें और स्थानीय रूप से इंस्टॉल करें

संदर्भ:

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