Package.json में node_modules के लिए पथ निर्दिष्ट करें


96

वहाँ एक आवेदन में नोड_modules निर्देशिका को स्थानांतरित करने के लिए एक तरीका है कहने के लिए / विक्रेता / नोड_modules जैसे bower bowerrc फ़ाइल के साथ करता है? मुझे लगा कि यह package.json में निर्दिष्ट किया जा सकता है, लेकिन मैं एक समाधान खोजने के लिए प्रतीत नहीं कर सकता। आपका सहयोग सराहनीय है।



@blunderboy लिंक के लिए धन्यवाद। यह पागल है कि इसे करने का कोई आसान तरीका नहीं है। ओह अच्छा।
स्ट्रॉइड

26
मुझे यकीन नहीं है कि आपने एक उत्तर क्यों स्वीकार किया है जो स्पष्ट रूप से आपके प्रश्न का उत्तर नहीं देता है। आप पूछते हैं कि रास्ते को कैसे सेट करना node_modules हैpackage.json , और xShirase का जवाब बस ऐसा करने का तरीका प्रदान नहीं करता है।
मार्क अमेरी

4
उन्होंने शायद जवाब स्वीकार कर लिया क्योंकि यह स्पष्ट रूप से एक एक्सवाई समस्या है और एक वैकल्पिक समाधान "क्षमा करें, यह संभव नहीं है" से बेहतर है।
जेक होल्ज़िंगर

जवाबों:


58

हाँ, आप केवल NODE_PATH env चर सेट कर सकते हैं:

export NODE_PATH='yourdir'/node_modules

डॉक्टर के अनुसार:

यदि NODE_PATH पर्यावरण चर को पूर्ण पथों की एक बृहदान्त्र-सीमांकित सूची में सेट किया जाता है, तो नोड उन रास्तों की खोज करेगा, यदि वे अन्यत्र नहीं पाए जाते हैं। (नोट: विंडोज पर, NODE_PATH को कॉलन के बजाय अर्धविराम द्वारा सीमांकित किया गया है।)

इसके अतिरिक्त, नोड निम्न स्थानों में खोज करेगा:

1: $ HOME / .node_modules

2: $ HOME / .node_lbooks

3: $ PREFIX / lib / नोड

जहां $ HOME उपयोगकर्ता की होम डायरेक्टरी है, और $ PREFIX नोड का कॉन्फ़िगर किया गया नोड_प्रिफ़िक्स है।

ये ज्यादातर ऐतिहासिक कारणों से हैं। आपको अत्यधिक रूप से अपने निर्भरता को स्थानीय रूप से नोड_मॉडल फ़ोल्डर में रखने के लिए प्रोत्साहित किया जाता है। उन्हें तेजी से लोड किया जाएगा, और अधिक मज़बूती से।

स्रोत


1
यह बहुत बढ़िया बात है। तो मेरे मामले में, जहां मेरे पास प्रत्येक एप्लिकेशन के लिए स्थानीय नोड_मॉडल हैं, मैं उस निर्यात को परियोजना में एक js फ़ाइल में करूंगा?
स्टायरॉइड

3
नहीं, यह एक पर्यावरण चर है, यह सिस्टम-स्तर पर सेटअप है। इसलिए आपको इसे अपने टर्मिनल में टाइप करना होगा। env variables को नोड ऐप के अंदर एक्सेस किया जाता हैprocess.env
xShirase

हम्मम अच्छा लगता है। मुझे इसमें कुछ और देखना पड़ेगा। सहायता के लिए धन्यवाद।
स्ट्रोइड

112
मुझे नहीं लगता कि यह इस सवाल का जवाब है: वह पैकेज के भीतर एक संपत्ति के लिए पूछ रहा था। LOCAL (आवेदन स्तर) npm- पैकेज के लिए एक रास्ता लगाने के लिए। यह उत्तर बताता है कि वह GLOBALLY (-g) स्थापित संकुल को दूसरे फ़ोल्डर में कैसे स्थानांतरित कर सकता है।
डेविड लॉसर्ट

2
@IsmailIqbal क्षमा करें, मैंने अभी आपकी टिप्पणी देखी। एनपीएम की दुनिया में दो साल हो गए हैं और हमने कैशिंग, यार्न या यहां तक ​​कि एनपीएम 5, वेबपैक के साथ काफी छलांग ली है ... मैं कहूंगा कि इन दिनों नोड_मॉडल की हैंडलिंग बेहतर है। आप के मामले में, मैं बस सभी स्थानों में एक "एनपीएम इंस्टॉल" करूंगा - क्योंकि एनपीएम कैश पहले से ही स्थापित पैकेज हैं, यह ओवरहेड के बिना मैन्युअल रूप से कॉपी करने के समान है।
डेविड लॉसर्ट

28

संक्षेप में: यह संभव नहीं है, और जैसा कि लगता है कि यह कभी भी समर्थित नहीं होगा (यहां देखें https://github.com/npm/npm/issues/775 )।

CLI या ENV-Variables (वर्तमान चयनित उत्तर देखें), .npmrc-config-files या npm link- वे सभी जो कुछ भी आम हैं , का उपयोग करने के साथ कुछ हैक किए गए कार्य-अराउंड हैं: वे कभी भी परियोजना-विशिष्ट नहीं होते हैं, लेकिन हमेशा कुछ प्रकार के होते हैं का globalसमाधान।

मेरे लिए, उन समाधानों में से कोई भी वास्तव में साफ नहीं है क्योंकि आपके प्रोजेक्ट में योगदानकर्ताओं को हमेशा कुछ विशेष कॉन्फ़िगरेशन बनाने या कुछ विशेष ज्ञान रखने की आवश्यकता होती है - वे बस नहीं कर सकते हैं npm installऔर यह काम करता है।

इसलिए: या तो आपको अपना पैकेज उसी स्थान पर रखना होगा, जहां आप अपना नोड_मॉडल इंस्टॉल करना चाहते हैं, या इस तथ्य के साथ रहते हैं कि वे हमेशा आपके प्रोजेक्ट के रूट-डायर में रहेंगे।


16
"यदि आप अलग-अलग तरीके से" नोड_मॉड्यूल्स "जादू करना चाहते हैं, तो क्षमा करें, कोई भी ऐसा नहीं कर सकता है। यह नोड-कोर में बनाया गया है। यह बदलना पूरी तरह से अलग पैकेज मैनेजर बनाने के लिए टेंटमाउंट है।" <== अच्छी नौकरी जिसका मैं चर अनुमान लगाता हूं।
स्टीवनब्रोर्न

2019 की एक टिप्पणी: ऐसा लगता है कि यार्न मॉड्यूल निर्देशिका को ओवरराइड करने का समर्थन करता है। खैर, यार्न एक नया पैकेज मैनेजर है, मुझे लगता है।
वनुआन

10

यार्न इस सुविधा का समर्थन करता है:

# .yarnrc file in project root
--modules-folder /node_modules

लेकिन आपका अनुभव आपके द्वारा उपयोग किए जाने वाले पैकेजों के आधार पर भिन्न हो सकता है। मुझे यकीन नहीं है कि आप उस खरगोश छेद में जाना चाहते हैं।


6

मुझे यकीन नहीं है कि यह वही है जो आपके मन में था, लेकिन मैं इस सवाल पर समाप्त हो गया क्योंकि मैं node_modulesअपनी परियोजना के अंदर स्थापित करने में असमर्थ था क्योंकि यह एक फाइलसिस्टम पर मुहिम कर रहा था जो सिम्लिंक्स (वीएम "साझा" फ़ोल्डर का समर्थन नहीं करता था )।

मुझे निम्नलिखित वर्कअराउंड मिला:

  1. package.jsonफ़ाइल को किसी अन्य फ़ाइल सिस्टम पर एक अस्थायी फ़ोल्डर में कॉपी करें
  2. npm installवहां दौड़ो
  3. परिणामी node_modulesनिर्देशिका की प्रतिलिपि प्रोजेक्ट dir में कॉपी करें, प्रतिलिपि में cp -r --dereferenceसीमलिंक का विस्तार करने के लिए।

मुझे आशा है कि यह किसी और व्यक्ति की मदद करता है जो इस सवाल पर समाप्त होता है जब node_modulesएक अलग फाइल सिस्टम में जाने का रास्ता खोजता है।

अन्य विकल्प

एक और वर्कअराउंड है, जो मुझे github मुद्दे पर मिला है जो @Charminbear से जुड़ा हुआ है , लेकिन यह साथ काम नहीं करता है gruntक्योंकि यह https://github.com/browserify/resolve/issues/136 केNODE_PATH अनुसार समर्थन नहीं करता है :

आप कहते हैं कि आप है /media/sf_sharedऔर आप वहाँ में symlinks स्थापित नहीं कर सकते, जिसका अर्थ है कि आप वास्तव में npm से स्थापित नहीं कर सकते /media/sf_shared/myprojectक्योंकि कुछ मॉड्यूल symlinks का उपयोग करते हैं।

  • $ mkdir /home/dan/myproject && cd /home/dan/myproject
  • $ ln -s /media/sf_shared/myproject/package.json (आप इस दिशा में सहानुभूति रख सकते हैं, बस एक को / मीडिया / sf_saring के अंदर नहीं बना सकते)
  • $ npm install
  • $ cd /media/sf_shared/myproject
  • $ NODE_PATH=/home/dan/myproject/node_modules node index.js
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.