सार
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
का पथ हमेशा उस फ़ाइल के सापेक्ष होता है जिसमें आप उसे कॉल कर रहे हैं। इसका आपके वर्किंग डायरेक्टरी से कोई लेना-देना नहीं है।