javascript - Node.js module.exports का उद्देश्य क्या है और आप इसका उपयोग कैसे करते हैं?
(6)
Node.js module.exports का उद्देश्य क्या है और आप इसका उपयोग कैसे करते हैं?
मुझे इस पर कोई जानकारी नहीं मिल रही है, लेकिन यह नोड.जेएस का एक महत्वपूर्ण हिस्सा प्रतीत होता है क्योंकि मैं इसे अक्सर स्रोत कोड में देखता हूं।
नोड.जेएस दस्तावेज के अनुसार:
मॉड्यूल
वर्तमान
module
एक संदर्भ। विशेषmodule.exports
में। निर्यात निर्यात वस्तु के समान है। अधिक जानकारी के लिएsrc/node.js
देखें।
लेकिन यह वास्तव में मदद नहीं करता है।
module.exports
वास्तव में क्या करता है, और एक साधारण उदाहरण क्या होगा?
Node.js में कुछ डिफ़ॉल्ट या मौजूदा मॉड्यूल हैं जब आप http, sys इत्यादि जैसे node.js को डाउनलोड और इंस्टॉल करते हैं।
चूंकि वे पहले से ही node.js में हैं, जब हम इन मॉड्यूल का उपयोग करना चाहते हैं तो हम मूल रूप से आयात मॉड्यूल की तरह करते हैं, लेकिन क्यों? क्योंकि वे पहले से ही node.js. में मौजूद हैं आयात करना उन्हें node.js से लेने और उन्हें अपने प्रोग्राम में डालने जैसा है। और फिर उनका उपयोग कर रहे हैं।
जबकि निर्यात बिल्कुल विपरीत है, आप जिस मॉड्यूल को चाहते हैं उसे बना रहे हैं, आइए मॉड्यूल add.js कहें और उस मॉड्यूल को node.js में डालें, आप इसे निर्यात करके करते हैं।
यहां कुछ भी लिखने से पहले, याद रखें, module.exports.additionTwo export.additionTwo के समान है
हू, यही कारण है, हम पसंद करते हैं
exports.additionTwo = function(x)
{return x+2;};
पथ से सावधान रहें
आइए कहें कि आपने एक जोड़ा.जेएस मॉड्यूल बनाया है,
exports.additionTwo = function(x){
return x + 2;
};
जब आप इसे अपने NODE.JS कमांड प्रॉम्प्ट पर चलाते हैं:
node
var run = require('addition.js');
यह कहने में त्रुटि होगी
त्रुटि: मॉड्यूल add.js नहीं मिल सकता है
ऐसा इसलिए है क्योंकि node.js प्रक्रिया add.js में असमर्थ है क्योंकि हमने पथ का उल्लेख नहीं किया है। इसलिए, हम NODE_PATH का उपयोग करके पथ सेट कर सकते हैं
set NODE_PATH = path/to/your/additon.js
अब, यह किसी भी त्रुटि के बिना सफलतापूर्वक भागना चाहिए !!
एक और बात, आप nODE_PATH को सेट करके add.js फ़ाइल को भी चला सकते हैं, अपने nodejs कमांड प्रॉम्प्ट पर वापस:
node
var run = require('./addition.js');
चूंकि हम यह कहकर पथ प्रदान कर रहे हैं कि यह वर्तमान निर्देशिका में है ./
इसे सफलतापूर्वक भी चलाया जाना चाहिए।
module.exports प्रॉपर्टी या निर्यात ऑब्जेक्ट एक मॉड्यूल को यह चुनने की अनुमति देता है कि एप्लिकेशन के साथ क्या साझा किया जाना चाहिए
मेरे पास मॉड्यूल_एक्सपोर्ट पर एक वीडियो उपलब्ध here
एक मॉड्यूल कोड की एक इकाई में संबंधित कोड encapsulates। मॉड्यूल बनाते समय, इसे सभी संबंधित कार्यों को फ़ाइल में ले जाने के रूप में व्याख्या किया जा सकता है।
मान लीजिए कि हैलो.जेएस फ़ाइल है जिसमें दो फ़ंक्शन शामिल हैं
sayHelloInEnglish = function() {
return "Hello";
};
sayHelloInSpanish = function() {
return "Hola";
};
हम केवल एक समारोह लिखते हैं जब कोड की उपयोगिता एक से अधिक कॉल होती है।
मान लीजिए कि हम फ़ंक्शन की उपयोगिता को एक अलग फ़ाइल में बढ़ाना चाहते हैं, वर्ल्ड.जेएस कहते हैं, इस मामले में एक फाइल निर्यात करने से चित्र में आता है जिसे मॉड्यूल.एक्सपोर्ट्स द्वारा प्राप्त किया जा सकता है।
आप नीचे दिए गए कोड द्वारा दोनों फ़ंक्शन को निर्यात कर सकते हैं
var anyVariable={
sayHelloInEnglish = function() {
return "Hello";
};
sayHelloInSpanish = function() {
return "Hola";
};
}
module.export=anyVariable;
अब आपको उन कार्यों का उपयोग करने के लिए केवल google.js inorder में फ़ाइल नाम की आवश्यकता है
var world= require("./hello.js");
एकाधिक प्रोग्रामों पर अपने प्रोग्राम कोड को विभाजित करते समय, module.exports
को मॉड्यूल के उपभोक्ता को चर और फ़ंक्शन प्रकाशित करने के लिए उपयोग किया जाता है। आपकी स्रोत फ़ाइल में require()
कॉल को मॉड्यूल से लोड किए गए संबंधित module.exports
साथ प्रतिस्थापित किया गया है।
मॉड्यूल लिखते समय याद रखें
- मॉड्यूल लोड कैश किए जाते हैं, केवल प्रारंभिक कॉल जावास्क्रिप्ट का मूल्यांकन करता है।
- मॉड्यूल के अंदर स्थानीय चर और कार्यों का उपयोग करना संभव है, सब कुछ निर्यात करने की आवश्यकता नहीं है।
-
module.exports
ऑब्जेक्टexports
module.exports
रूप में भी उपलब्ध है। लेकिन एकमात्र फ़ंक्शन लौटने पर, हमेशाmodule.exports
उपयोगmodule.exports
।
के अनुसार: "मॉड्यूल भाग 2 - लेखन मॉड्यूल" ।
यदि आप exports
और / या modules.exports
लिए किसी नए ऑब्जेक्ट का संदर्भ निर्दिष्ट करते हैं तो कुछ चीजें आपको सावधानी बरतनी चाहिए। exports
:
1. मूल exports
या module.exports
से पहले जुड़े सभी गुण / विधियां निश्चित रूप से खो गई हैं क्योंकि निर्यातित वस्तु अब एक और नया संदर्भ देगी
यह एक स्पष्ट है, लेकिन यदि आप मौजूदा मॉड्यूल की शुरुआत में एक निर्यात विधि जोड़ते हैं, तो सुनिश्चित करें कि मूल निर्यातित वस्तु अंत में किसी अन्य ऑब्जेक्ट का संदर्भ नहीं दे रही है
exports.method1 = function () {}; // exposed to the original exported object
exports.method2 = function () {}; // exposed to the original exported object
module.exports.method3 = function () {}; // exposed with method1 & method2
var otherAPI = {
// some properties and/or methods
}
exports = otherAPI; // replace the original API (works also with module.exports)
2. यदि exports
या module.exports
कोई एक नया मान संदर्भित करता है, तो वे किसी भी वस्तु का संदर्भ नहीं लेते हैं
exports = function AConstructor() {}; // override the original exported object
exports.method2 = function () {}; // exposed to the new exported object
// method added to the original exports object which not exposed any more
module.exports.method3 = function () {};
3. मुश्किल परिणाम। यदि आप दोनों exports
और module.exports
के संदर्भ को module.exports
, तो यह कहना मुश्किल है कि कौन सी एपीआई उजागर हुई है (ऐसा लगता है कि module.exports
जीतता है)
// override the original exported object
module.exports = function AConstructor() {};
// try to override the original exported object
// but module.exports will be exposed instead
exports = function AnotherConstructor() {};
संदर्भ लिंक इस तरह है:
exports = module.exports = function(){
//....
}
exports
या module.exports
, जैसे फंक्शंस या वैरिएबल के गुण, बाहर उजागर किए जाएंगे
कुछ ऐसा है जो आपको अधिक ध्यान देना चाहिए: निर्यात को override
न करें।
क्यूं कर ?
क्योंकि निर्यात केवल मॉड्यूल.एक्सपोर्ट का संदर्भ है, आप निर्यात पर गुण जोड़ सकते हैं, लेकिन यदि आप निर्यात को ओवरराइड करते हैं, तो संदर्भ लिंक टूटा जाएगा।
अच्छा उदाहरण :
exports.name = 'william';
exports.getName = function(){
console.log(this.name);
}
खराब उदाहरण :
exports = 'william';
exports = function(){
//...
}
यदि आप केवल एक ही फ़ंक्शन या चर का खुलासा करना चाहते हैं, तो इस तरह:
// test.js
var name = 'william';
module.exports = function(){
console.log(name);
}
// index.js
var test = require('./test');
test();
इस मॉड्यूल ने केवल एक समारोह का खुलासा किया और नाम की संपत्ति बाहर के लिए निजी है।