2012-02-17 23 views
9

यहां स्थिति है ... इसलिए मैंने एक नोड.जेएस मॉड्यूल बनाया है जो कुछ नोड.जेएस टेम्पलेट इंजन, Shift.js पर इंटरफ़ेस के रूप में कार्य करता है। यह किसी अन्य Node.js मॉड्यूल के अंदर शामिल है, Design.io (यह निर्दिष्ट है Design.io's package.json dependencies ब्लॉक)। Design.io परिवर्तनों के लिए फाइलें देखता है।"त्रुटि: मॉड्यूल 'कम नहीं मिला' 'Node.js मॉड्यूल लोडिंग वरीयता/ऑर्डर/कैश?

फिर आप एक ऐप और require('design.io') बनाते हैं। आप अपनी परियोजना में कम, स्टाइलस भी कहते हैं, कहते हैं।

इस तरह, जब आप एक .less या .styl फ़ाइल सहेजें, तरीकों की एक श्रृंखला कहा जाता है:

  1. require("design.io") फाइल सिस्टम ईवेंट की सूचना दी जाती है। Design.io फिर
  2. require('shift').render(string, extension, callback) पर कॉल करता है। Shift.js तब
  3. require(moduleFor(extension)) # require("less") पर कॉल करता है। स्ट्रिंग संकलित है।

मेरी ऐप्लिकेशन में (वर्तमान कार्यशील निर्देशिका) मैं कम और लेखनी स्थापित किया है:

npm install less stylus 

समस्या मैं आ रही है चरण में, 3 जो Shift.js के भीतर से कहा जाता है मॉड्यूल, मुझे इस तरह की त्रुटियां मिलती हैं:

Error: Cannot find module 'less' 
    at Function._resolveFilename (module.js:334:11) 
    at Function._load (module.js:279:25) 
    at Module.require (module.js:357:17) 
    at require (module.js:368:17) 
    at Less.engine (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:6:14) 
    at Less.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift/less.js:18:21) 
    at /Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:69:23 
    at /Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:118:13 
    at Object.forEachSeries (/Users/viatropos/Documents/git/plugins/design.io/node_modules/async/lib/async.js:134:9) 
    at Object.render (/Users/viatropos/Documents/git/plugins/design.io/node_modules/shift/lib/shift.js:78:31) 

मेरा प्रश्न है, यह क्यों हो रहा है? मैंने सोचा था कि जब तक वे कहीं स्थापित किए गए थे, तब तक आप गतिशील रूप से मॉड्यूल से पुस्तकालयों की आवश्यकता कर सकते थे ... मुझे क्या याद आ रही है?

लक्ष्य यह होगा कि Shift.js जैसे पुस्तकालयों को package.json में प्रत्येक एकल निर्भरता को परिभाषित नहीं करना होगा ... "टेम्पलेट इंजन के लिए इंटरफ़ेस" लाइब्रेरी के लिए, उसमें बहुत अधिक निर्भरताओं की आवश्यकता होगी कि ऐप शायद कभी नहीं होगा का उपयोग करते हुए।

सहायता के लिए धन्यवाद, उम्मीद है कि कुछ हद तक स्पष्ट था।

+0

मुझे लगता है कि यह एक से ठीक कर सकते ... मैं एक आदेश है 'design.io' मैं फोन, भाग गया जो' आवश्यकता है ('../ lib/design.io/process.js') 'जो पूरे वॉचर प्रक्रिया शुरू करता है।यदि मैं इसे 'आवश्यकता (' design.io/lib/design.io/process.js ') में बदलता हूं, तो सब ठीक से लोड हो रहा है। अजीब, बी/सी 'requ.main.paths' दोनों मामलों में समान हैं। –

उत्तर

25

जब आप npm install foo, foo मॉड्यूल वर्तमान कार्य निर्देशिका में node_modules नामक निर्देशिका में स्थापित हो जाता है।

जब आप इस shift पुस्तकालय स्थापित है, यह केवल लग रहा है मॉड्यूल अपनी हीnode_modules निर्देशिका के भीतर की आवश्यकता के लिए के लिए, या वैश्विक निर्देशिका require.resolve() खोजों में से एक में।

और वह आपकी समस्या का सरल उपाय है:

npm install -g less 

और फिर पुस्तकालय विश्व स्तर पर अपने कंप्यूटर पर सभी Node.js कोड को दिखाई देती है, न कि केवल वर्तमान कार्यशील निर्देशिका में कोड को दिखाई देने से।

वैकल्पिक रूप से, अगर आप केवल shift यह देखना चाहते हैं, तो कुछ इस तरह करते हैं:

npm install shift 
cd node_modules/shift 
npm install less