2015-04-20 11 views
11

के लिए स्थान node_modules अगर मैं अपने प्रोजेक्ट मेंविश्व स्तर पर सेट परियोजना

var moment = require('moment'); 

लिखते हैं, स्थानों है कि वास्तव में फ़ाइल शामिल नहीं है, इस dtruss उत्पादन से पता चलता है के रूप में में देख समय की नोड कचरे एक बहुत।

 PID/THRD RELATIVE SYSCALL(args)     = return 
7079/0x7cf313: 1244530 stat64("/Users/burke/code/api/api/models/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x9)   = -1 Err#2 
7079/0x7cf313: 1244575 stat64("/Users/burke/code/api/api/models/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244595 stat64("/Users/burke/code/api/api/models/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244612 stat64("/Users/burke/code/api/api/models/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1244628 stat64("/Users/burke/code/api/api/models/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)   = -1 Err#2 
7079/0x7cf313: 1244663 open("/Users/burke/code/api/api/models/node_modules/moment/package.json\0", 0x0, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244694 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244713 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244729 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244745 stat64("/Users/burke/code/api/api/models/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244767 stat64("/Users/burke/code/api/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244788 stat64("/Users/burke/code/api/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244805 stat64("/Users/burke/code/api/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244821 stat64("/Users/burke/code/api/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244837 stat64("/Users/burke/code/api/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244862 open("/Users/burke/code/api/api/node_modules/moment/package.json\0", 0x0, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244887 stat64("/Users/burke/code/api/api/node_modules/moment/index.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1244904 stat64("/Users/burke/code/api/api/node_modules/moment/index.json\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244920 stat64("/Users/burke/code/api/api/node_modules/moment/index.node\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244936 stat64("/Users/burke/code/api/api/node_modules/moment/index.coffee\0", 0x7FFF5FBFE578, 0x1B6)   = -1 Err#2 
7079/0x7cf313: 1244964 stat64("/Users/burke/code/api/node_modules/moment\0", 0x7FFF5FBFE5D8, 0x1B6)   = 0 0 
7079/0x7cf313: 1244990 stat64("/Users/burke/code/api/node_modules/moment.js\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245015 stat64("/Users/burke/code/api/node_modules/moment.json\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245038 stat64("/Users/burke/code/api/node_modules/moment.node\0", 0x7FFF5FBFE578, 0x1B6)    = -1 Err#2 
7079/0x7cf313: 1245488 madvise(0x1008AE000, 0x21000, 0x9)    = 0 0 
7079/0x7cf313: 1245503 stat64("/Users/burke/code/api/node_modules/moment.coffee\0", 0x7FFF5FBFE578, 0x9)    = -1 Err#2 
7079/0x7cf313: 1245612 open("/Users/burke/code/api/node_modules/moment/package.json\0", 0x0, 0x1B6)   = 11 0 

वहाँ नोड इतना समय स्थानों है कि एक node_modules निर्देशिका शामिल नहीं है में देख बर्बाद मत बनाने के लिए एक तरीका है? जैसे, मैं किसी प्रकार का CHECK_HERE_FIRST=$HOME/code/api/node_modules पर्यावरण चर सेट कर सकता हूं और यदि आवश्यकता किसी सापेक्ष पथ के लिए नहीं है, तो यह नोड की पहली जगह होगी।

मैं सापेक्ष आयात लोड करने के लिए अपने सभी require लाइनों को बदल सकता हूं लेकिन यह एक बड़ी परियोजना के लिए बोझिल लगता है।

उत्तर

0

मुझे नहीं लगता कि require को बदले बिना ऐसा करने का एक शानदार तरीका है, जिसे टालना चाहिए। यदि आप प्रदर्शन समस्याओं के बारे में चिंतित हैं, तो यह आपको रात में सोने में मदद कर सकता है यह जानकर कि यह केवल मॉड्यूल कैशिंग के कारण होता है।

शायद आप अपने ऐप के स्टार्टअप के दौरान आवश्यक सभी मॉड्यूल require कर सकते हैं।

0

node's docs के अनुसार, वहाँ कोई रास्ता नहीं इस व्यवहार

बदलने के लिए अगर मॉड्यूल पहचानकर्ता) की आवश्यकता होती है के लिए पारित (एक देशी मॉड्यूल नहीं है, और '/', से शुरू नहीं होता '../' , या './', तो नोड वर्तमान मॉड्यूल की मूल निर्देशिका से शुरू होता है, और जोड़ता है/node_modules, और उस स्थान से मॉड्यूल को लोड करने का प्रयास करता है।

यदि यह वहां नहीं मिला है, तो यह मूल निर्देशिका में जाता है, और इसी तरह, जब तक फ़ाइल सिस्टम की जड़ तक नहीं पहुंच जाती है।

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

4

यह व्यवहार (बहुत अधिक स्टेट बनाने) को हटा दिया गया है (PR देखें) io.js v2.3.1 से, यह node.js. के अगले प्रमुख संस्करण में उपलब्ध होगा।

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