के भीतर से module.exports जाओ एक फाइल में मैं इस कोड है।एक ही फाइल
मुझे लगा कि यह काम करेगा:
this.greet()
लेकिन ऐसा नहीं किया।
मुझे संदर्भ का क्या संदर्भ है?
के भीतर से module.exports जाओ एक फाइल में मैं इस कोड है।एक ही फाइल
मुझे लगा कि यह काम करेगा:
this.greet()
लेकिन ऐसा नहीं किया।
मुझे संदर्भ का क्या संदर्भ है?
आम तौर पर, यह ठीक काम करना चाहिए, लेकिन देखते हैं कि यह क्यों विफल हो सकता है।
कुछ पृष्ठभूमि पहले
क्या होता है कि exports
एक वस्तु है कि, require
, module
, __dirname
आदि जैसे कुछ अन्य बातें साथ-साथ बंद कि मॉड्यूल सामग्री लपेटता में पारित हो जाता है, exports
तो है require()
द्वारा लौटाया गया।
देखें: https://github.com/ry/node/blob/master/src/node.js#L327
this
मॉड्यूल के अंदर, exports
वस्तु को संदर्भित करता है module
वस्तु तो exports
ऑब्जेक्ट के संदर्भ रखती है। मॉड्यूल के अंदर नाम स्थान बंद के माध्यम से प्रदान किया जाता है।
अंत में global
ऑब्जेक्ट भी है जो वैश्विक नाम स्थान और मेजबान चीजें process
प्रदान करता है।
उदाहरण
// main.js
this.bla = function(){} // sets bla on the the exports object
require('./sub');
console.log(this); // { bla: [Function] }
console.log(exports); // { bla: [Function] }
console.log(module); /* { id: '.',
exports: { bla: [Function] },
parent: undefined,
filename: '/home/ivo/Desktop/main.js',
loaded: false,
exited: false,
children: [] } */
// sub.js
this.greet = function() {} // sets greet on the exports object
console.log(this); // { greet: [Function] }
console.log(exports); // { greet: [Function] }
console.log(module); /* { id: './sub',
exports: { greet: [Function] },
parent:
{ id: '.',
exports: { bla: [Function] },
parent: undefined,
filename: '/home/ivo/Desktop/main.js',
loaded: false,
exited: false,
children: [] },
filename: '/home/ivo/Desktop/sub.js',
loaded: false,
exited: false,
children: [] } */
समस्या
तथ्य अपने कोड काम नहीं करता है कि वातावरण चर NODE_MODULE_CONTEXTS
एक पूर्णांक शून्य से भी बड़ा करने के लिए स्थापित किया गया था है कि के लिए केवल विवरण का कारण।
इस मामले में मॉड्यूल अपने संदर्भ में चलते हैं। मुख्य मॉड्यूल के अंदर this
अब global
ऑब्जेक्ट और उप मॉड्यूल के अंदर संदर्भित होगा, यह सैंडबॉक्स ऑब्जेक्ट का संदर्भ देगा। इसलिए this.foo
exports
ऑब्जेक्ट पर कोई भी संपत्ति सेट नहीं करेगा।
देखें: https://github.com/ry/node/blob/master/src/node.js#L98
और: https://github.com/ry/node/blob/master/src/node.js#L296
समस्या फिक्सिंग
आप वातावरण चर उस नोड प्रक्रिया के लिए पारित किए गए जांच कर सकते हैं:
console.log(process.env); // get a list of all variables
// get just the one that's causing trouble, if this returns a number > 0 then it's in effect
console.log(process.env['NODE_MODULE_CONTEXTS']);
मामले में कि NODE_MODULE_CONTEXTS
में है प्रभाव, export NODE_MODULE_CONTEXTS=1;
जैसे कुछ के लिए आपको अपने ~/.bashrc
और ~/.bash_profile
फ़ाइलों की जांच करने की आवश्यकता है और इसे हटा दो।
एक नया टर्मिनल खोलना सुनिश्चित करें, क्योंकि उन दो फ़ाइलों को बदलने के बाद केवल तभी पढ़ा जाता है जब कोई बनाया जाता है।
बस पूछना चाहता था कि पर्यावरण के बारे में मेरा जवाब आपके लिए सहायक था या नहीं, अन्यथा यह एक बग हो सकता है जिसे दायर किया जाना चाहिए :) –