उत्तर है: ऐतिहासिक कारण।
आप सही हैं, हम केवल module
और exports
की आवश्यकता नहीं होगी, लेकिन यह अभी भी पीछे की संगतता के लिए है।
यह ऐसा समय होता था जब मॉड्यूल रैपर को हर पैच रिलीज में काफी बदल दिया गया था।
नोड 0.1.11 में मॉड्यूल आवरण था:
var wrapper = "function (__filename) { "+
" var onLoad; "+
" var onExit; "+
" var exports = this; "+
content+
"\n"+
" this.__onLoad = onLoad;\n"+
" this.__onExit = onExit;\n"+
"};\n";
देखें: https://github.com/nodejs/node/blob/v0.1.11/src/node.js#L167#L177
आप exports
देख सकते हैं this
कि आवरण समारोह के साथ बुलाया गया था के रूप में ही किया गया था। आप इसे एक नई वस्तु के साथ स्वैप नहीं कर सके और आप इसमें कुछ आरक्षित कुंजी भी नहीं जोड़ पाए - उदा। आप __onExit
नामक संपत्ति को सुरक्षित रूप से निर्यात नहीं कर सके।
तो 0.1.12 में यह था:
var wrapper = "function (__filename, exports) { " + content + "\n};";
देखें: https://github.com/nodejs/node/blob/v0.1.12/src/node.js#L243-L245
यहाँ exports
एक वस्तु तर्क के रूप में आपूर्ति की थी, लेकिन आप एक नया उद्देश्य के साथ यह स्वैप नहीं कर सकता है, आप केवल उस ऑब्जेक्ट से गुण जोड़ या निकाल सकते हैं जो आपको मिला है।
तो 0.1.13 इस संबंध के लिए पहले, require
और include
था अर्थात्:
var wrapper = "function (__filename, exports, require, include) { " + content + "\n};";
देखें: https://github.com/nodejs/node/blob/v0.1.13/src/node.js#L225-L227
तो 0.1.14 में __module
(अंडरस्कोर से) के लिए पहली बार था आवरण (और कहा कि include
गिरा):
var wrapper = "var __wrap__ = function (__module, __filename, exports, require) { "
+ content
+ "\n}; __wrap__;";
देखें: https://github.com/nodejs/node/blob/v0.1.14/src/node.js#L280-L284
और 0.1।16 आवरण में एक module
तर्क (कोई अंडरस्कोर के साथ) के लिए पहली बार था:
var wrapper = "var __wrap__ = function (exports, require, module, __filename) { "
+ content
+ "\n}; __wrap__;";
देखें: https://github.com/nodejs/node/blob/v0.1.16/src/node.js#L444-L448
यह उस के बाद कई बार बदल गया है लेकिन इस बार कि module
बनाने की शुरुआत की हो गई है exports
किसी भी अधिक है लेकिन अभी भी एक उपयोगी शॉर्टकट आवश्यक नहीं है, तो आप उपयोग करने की अनुमति:
exports.a = 1;
exports.b = 2;
exports.c = 3;
के बजाय:
0,123,
module.exports.a = 1;
module.exports.b = 2;
module.exports.c = 3;
हालांकि व्यवहार में अगर वहाँ था कोई exports
तो एक आम तौर पर लिखना होगा:
const exports = module.exports;
exports.a = 1;
exports.b = 2;
exports.c = 3;
या अधिक होने की संभावना:
:
module.exports = {
a: 1,
b: 2,
c: 3,
};
या, स्थैतिक विश्लेषण उपकरणों में कुछ जांच के लिए
const a = 1;
const b = 2;
const c = 3;
module.exports = { a, b, c };
ऐसा करने के कई तरीके हैं, यह एक सुंदर है लचीला तंत्र।
मुझे इसे मारो। मुझे याद करने से पहले था। – OrangeDog