2015-01-04 10 views
8

पर node_modules स्थापित करें मैं प्रत्येक प्रोजेक्ट के लिए स्थानीय रूप से vendor/node_modules पर एनपीएम मॉड्यूल कैसे स्थापित कर सकता हूं और package.json फ़ाइल उन्हें देख सकता हूं। कि सुपर आसान है -विक्रेता

मैं विक्रेता फ़ोल्डर

मैं बोवर है और .bowerrc में मैं bower_components पथ निर्दिष्ट करने के लिए package.json ले जाने के लिए नहीं करना चाहती।

मैं एनपीएम के साथ ऐसा कैसे कर सकता हूं?

मैंने दस्तावेज़ों, एनपीआरआरसी दस्तावेज़ों को पढ़ा है, यहां कुछ प्रश्न हैं, गुगले हुए हैं, एक घंटे से अधिक बर्बाद हैं - अभी भी कोई भाग्य नहीं है। इस तरह के एक आसान काम के लिए यह हास्यास्पद रूप से कठिन है।

मुझे minuses के बारे में परवाह नहीं है, बस मुझे बताएं कि अंततः यह कैसे करें।

उत्तर

2

आप अंतर्निहित एनपीएम कार्यक्षमता का उपयोग नहीं कर सकते हैं।

This discussion एनपीएम जिथब रिपोजिटरी पर इस मुद्दे को शामिल किया गया है। इसे this answer में भी संबोधित किया जा रहा है जो उनके अक्सर पूछे जाने वाले प्रश्नों का हिस्सा है।

आप अभी भी अपने /vendor निर्देशिका में मॉड्यूल को कॉपी और फिर require("./vendor/whatever") वाक्य रचना का उपयोग कर उन्हें फोन करके "मैन्युअल" यदि इंस्टॉल कर सकते हैं ... लेकिन यह है कि प्रत्येक require जरूरतों अपने नए कस्टम स्थान का उपयोग करने का मतलब है। ऐसे कुछ तरीके हैं जिन्हें आप इसे संभाल सकते हैं लेकिन उनका मतलब है कि आप कस्टम स्रोत को समायोजित करने के लिए अपने स्रोत में अतिरिक्त कार्य कर रहे हैं।

preinstall.js:

+0

** आप नहीं कर सकते हैं ** 'npm' संकुल को खोजने के लिए नोड एल्गोरिथ्म, यहाँ विस्तृत उपयोग करता है:। आप को संशोधित करने के लिए होता है अपने "विक्रेता/नोड_मोड्यूल" का समर्थन करने के लिए 'नोड' बाइनरी –

+0

यह सच है, लेकिन npm कस्टम निर्देशिका में स्थापित नहीं होगा। आप आवश्यकता के लिए एक मार्ग प्रदान कर सकते हैं जिसका उपयोग नोड से पहले विभिन्न नोड_मोड्यूल स्थानों पर चलता है .... लेकिन एनपीएम अभी भी किसी भी जगह स्थापित नहीं करेगा लेकिन node_modules। तो आप एनपीएम का उपयोग किए बिना तकनीकी रूप से एक नोड प्रोजेक्ट लिख सकते हैं लेकिन आपको प्रत्येक आवश्यकता के लिए हर पथ को हार्ड कोड करना होगा। –

9

तथ्य वहाँ कोई एक मनमाना सबफ़ोल्डर में एक node_modules फ़ोल्डर में स्थापित करने के लिए रास्ते में बनाया जा रहा है कि द्वारा निराश, मैं एक डरपोक समाधान दो निम्नलिखित स्क्रिप्ट का उपयोग कर के साथ आया था

var fs = require("fs"); 
try 
{ 
    fs.mkdirSync("./app/node_modules/"); 
} 
catch(e) 
{ 
} 

try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules/","junction"); 
    } 
    else 
    { 
     fs.symlinkSync("./app/node_modules/","./node_modules","dir"); 
    } 
} 
catch(e){} 

postinstall.js

var fs = require("fs"); 
try 
{ 
    if(process.platform.indexOf("win32") !== -1) 
    { 
     fs.unlinkSync("./node_modules/"); 
    } 
    else 
    { 
     fs.unlinkSync("./node_modules"); 
    } 
} 
catch(e){} 

तुम सब करने की ज़रूरत है उन्हें scripts विकल्प को जोड़कर अपने package.json फ़ाइल में उन्हें इस्तेमाल किया जाता है:

"scripts": { 
    "preinstall": "node preinstall.js", 
    "postinstall": "node postinstall.js" 
}, 

तो, बड़ा सवाल यह है: यह क्या करता है?

  1. खैर, जब आप npm installpreinstall.js स्क्रिप्ट आग जो सबफ़ोल्डर आप चाहते हैं में एक node_modules बनाता है कहते हैं। फिर यह node_modules से वास्तविक node_modules से से symlink या (shortcut विंडोज) बनाता है।

  2. फिर npm सभी निर्भरताओं को स्थापित करता है।

  3. अंत में, सभी निर्भरताओं को स्थापित करने के बाद, postinstall.js स्क्रिप्ट आग जो symlink को हटा देती है!

यहाँ सब है कि आप की जरूरत के साथ एक आसान gist है।

+1

आपने अभी मेरे दिन सिम्लिंक विचार के साथ बचाया है, जो मेरे उपयोग के मामले में बहुत अच्छा काम करता है (कई परियोजनाओं में एक ही मॉड्यूल का उपयोग करके पूरे नोड_मोड्यूल निर्देशिका को एक आकर्षण की तरह काम करना मुश्किल है)। –

+0

बिल्कुल शानदार! –

+0

यह node_modules के लिए बहुत अच्छा काम करता है, लेकिन अब मेरी gulpfile.js शिकायत करता है कि जब तक मैं postinstall.js नहीं चलाकर symlink रखता हूं, तब तक कोई स्थानीय गल्प स्थापित नहीं होता है क्या इस परिदृश्य में निष्पादित करने के लिए gulpfile.js प्राप्त करने के लिए वैसे भी है? –

संबंधित मुद्दे