2010-12-05 19 views
5

मैं पहुँच मॉड्यूल के लिए कोशिश कर रहा हूँ में आवश्यकता होती है लेकिन घोंसले के लिए वैसे भी हाथतक पहुँचने मॉड्यूल अपेक्षाकृत NodeJS

require("../../../Folder/Deeper/someFile")

से बाहर एक सा हो जाता है वहाँ है बस का उपयोग require("Folder/Deeper/somefile")

मैं

require.paths = ['/media/work/Project'];

स्थापित करने की कोशिश की है लेकिन यह है कि काम करने के लिए प्रतीत नहीं होता है और मुझे थोड़ा बदसूरत लगता है।

क्या कोई विकल्प हैं। क्या इसके लिए एक रैपर लिखने का कोई तरीका है?

उत्तर

4

शायद यह?

require.paths.unshift('../../..'); 
require("Folder/Deeper/somefile"); 

http://nodejs.org/api.html का कहना है:

एक() की आवश्यकता होती है के लिए खोज पथ की सरणी require.paths। यह सरणी कस्टम पथ जोड़ने के लिए संशोधित हो सकती है।

उदाहरण:

require.paths.unshift('/usr/local/node'); 
+0

वैश्विक स्तर या स्थानीय फाइलों की आवश्यकता है? – Raynos

+0

@ रेनॉस: afaik global – thejh

+1

मेरी त्रुटि की आवश्यकता थी paths = [...] unshift का उपयोग करने के बजाय। मुझे विश्वास नहीं है कि इसे ठीक किया गया है। – Raynos

0

आपके आवेदन एक फ़ोल्डर में अनुप्रयोग जड़ में (जैसे कि, ./app) यह नरम-लिंक node_modules में रखो, तो खोज सूची की शुरुआत के लिए एक नया पथ को जोड़ने जैसे इतना:

ln -s ../app ./node_modules 

(app से पहले डबल डॉट ध्यान दें।)

यह आपके एप्लिकेशन जड़ से require मॉड्यूल के लिए आप की अनुमति देगा:

require('app/route/api') 

सुविधा के लिए, package.json में इस में शामिल एक postinstall स्क्रिप्ट प्रत्येक npm install पर चलने के लिए के रूप में:

"scripts": { 
    "postinstall": "ln -sf ../app ./node_modules" 
} 

विंडोज ln नहीं है , इसलिए विंडोज उपयोगकर्ताओं को मैन्युअल रूप से सिमलिंक बनाना होगा। यह विंडोज पर काम कर सकता है या नहीं भी हो सकता है।

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