सार
Node.js में, __dirnameहमेशा वह निर्देशिका होती है जिसमें वर्तमान में निष्पादित स्क्रिप्ट रहती है (इसे देखें )। इसलिए यदि आप टाइप __dirnameकरते हैं /d1/d2/myscript.js, तो मान होगा /d1/d2।
इसके विपरीत, .आप निर्देशिका जिसमें से आप भाग गया देता है nodeअपने टर्मिनल विंडो में आदेश (यानी अपने कार्यशील निर्देशिका) जब आप की तरह पुस्तकालयों का उपयोग pathऔर fs। तकनीकी रूप से, यह आपकी कार्यशील निर्देशिका के रूप में शुरू होता है, लेकिन इसका उपयोग करके बदला जा सकता है process.chdir()।
अपवाद तब होता है जब आप उपयोग .करते हैं require()। अंदर requireका रास्ता हमेशा उस फाइल के सापेक्ष होता है जिसमें कॉल होती है require।
उदाहरण के लिए...
मान लीजिए कि आपकी निर्देशिका संरचना है
/dir1
/dir2
pathtest.js
और pathtest.jsइसमें शामिल है
var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));
और आप करते हैं
cd /dir1/dir2
node pathtest.js
आपको मिला
. = /dir1/dir2
__dirname = /dir1/dir2
आपकी वर्किंग डाइरेक्टरी /dir1/dir2इतनी है कि इसका .समाधान क्या है। चूँकि उसमें pathtest.jsस्थित है और /dir1/dir2जो __dirnameजैसा है वैसा ही हल करता है।
हालाँकि, यदि आप स्क्रिप्ट से चलाते हैं /dir1
cd /dir1
node dir2/pathtest.js
आपको मिला
. = /dir1
__dirname = /dir1/dir2
उस स्थिति में, आपकी कार्यशील निर्देशिका /dir1इतनी थी कि उसका .समाधान किया गया था, लेकिन फिर __dirnameभी वह हल करता है /dir1/dir2।
.अंदर का उपयोग require...
अंदर तो dir2/pathtest.jsआप एक है requireमें कॉल एक फ़ाइल को शामिल अंदर dir1आप चाहते हैं हमेशा करना
require('../thefile')
क्योंकि अंदर requireका पथ हमेशा उस फ़ाइल के सापेक्ष होता है जिसमें आप उसे कॉल कर रहे हैं। इसका आपके वर्किंग डायरेक्टरी से कोई लेना-देना नहीं है।