लगभग कोई भी फ़ंक्शन (require
को छोड़कर) जो फ़ाइल पथ को तर्क के रूप में लेता है, एक बिंदु पर fs
मॉड्यूल से पढ़ने या लिखने के लिए एक बिंदु का उपयोग करेगा।
Node.js documentation for fs module का कहना है:
फ़ाइल नाम के सापेक्ष पथ, इस्तेमाल किया जा सकता है लेकिन याद रखें कि यह पथ process.cwd के सापेक्ष किया जाएगा()।
जब आप इसके बारे में सोचते हैं, तो इन कार्यों को किसी भी अलग तरीके से व्यवहार करने के लिए प्रमुख चालबाजी की आवश्यकता होगी। आखिरकार, एफएस फ़ंक्शन नियमित जावास्क्रिप्ट होते हैं और उनके पास कॉलर के बारे में जानकारी तक विशेष पहुंच नहीं होती है। केवल __dirname
वे यहां पहुंच सकता है अपने स्वयं के मॉड्यूल (कोर FS मॉड्यूल) के __dirname
होगा।
तथ्य यह है कि require
समारोह कर सकते हैं संकल्प पथ वर्तमान __dirname
के सापेक्ष, इस स्पष्ट रूप से निर्दिष्ट किए बिना, क्योंकि require
हर एक फ़ाइल में प्रकट होता है। इस तरह के लिए एक अनूठा समारोह है यह वर्तमान की पहुंच है मॉड्यूल के विनिर्देश, और विशेष रूप से इसके पथ।
आपका कोड काम करने के कारण होने का कारण यह है कि वर्तमान में app.js
(या समान) उपरोक्त कोड उसी निर्देशिका में होता है जैसा वर्तमान में process.cwd()
है। अर्थात। node app.js
के साथ ऐप शुरू करना node myappdir/app.js
(इसकी मूल निर्देशिका से भाग गया) के साथ ऐप शुरू करते समय काम करेगा। process.cwd()
अलग होगा।
जब तक आप मन में है कि संबंधित पथ process.cwd()
के माध्यम से समाधान हो जाएगा रखने के लिए, तो आप छोटे वाक्य विन्यास का उपयोग कर सकते हैं। कुछ मामलों में यह एक फायदा हो सकता है। यह आपके कोड को इस पर निर्भर करता है कि इसे कैसा कहा जाता है। मैं व्यक्तिगत रूप से, __dirname
का उपयोग करना पसंद है क्योंकि यह कुछ और अधिक क्या हो रहा है के रूप में पारदर्शी है, और पथ आप एक ही फाइल के लिए एक require
बयान में उपयोग करने के साथ संबंधित पथ संगत।
स्रोत
2013-05-24 08:06:35
मैं स्थानों को परिभाषित करने के लिए Windows पर टूट जाएगा के अंतिम रास्ता विश्वास करते हैं। मैं '__dirname + '/ folder'' का उपयोग कर 90% हूं, सबसे सुरक्षित दृष्टिकोण है (बिना ठोस साक्ष्य के, केवल यादृच्छिक अनुभव विंडोज़ में नोड के साथ गड़बड़ कर रहा है)। –