Process.cwd () बनाम __dirname के बीच क्या अंतर है?


302

के बीच क्या अंतर है

console.log(process.cwd())

तथा

console.log(__dirname);

मैंने देखा है कि दोनों समान संदर्भों में उपयोग किए जाते हैं।

जवाबों:


486

process.cwd() वर्तमान कार्य निर्देशिका लौटाता है,

यानी वह निर्देशिका जिससे आपने nodeकमांड मंगाया था ।

__dirname जावास्क्रिप्ट स्रोत कोड फ़ाइल वाली निर्देशिका का निर्देशिका नाम देता है


5
क्या इसका मतलब यह है कि सभी मामलों के लिए process.cwd()पर्यायवाची है .सिवाय इसके require()?
अलेक्जेंडर गोंचिए

10
@AlexanderGonchiy सही है, (इसलिए समानार्थी) के .सापेक्ष है process.cwd(), सिवाय इसके require()कि वर्तमान निष्पादन फ़ाइल के सापेक्ष काम करता है। अधिक के लिए यहाँ देखें ।
dwelle 17

1
ध्यान दें कि वर्तमान कार्यशील निर्देशिका को प्रक्रिया के समय रनचेयर में बदल दिया जा सकता है।
मास्टरएक्सिलो

84

प्रति नोड js के रूप में दस्तावेज़ process.cwd()

cwdवैश्विक ऑब्जेक्ट की एक विधि है process, एक स्ट्रिंग मान देता है जो Node.js प्रक्रिया की वर्तमान कार्यशील निर्देशिका है।

प्रति नोड js के रूप में दस्तावेज़ __dirname

स्ट्रिंग मान के रूप में वर्तमान स्क्रिप्ट का निर्देशिका नाम। __dirname वास्तव में वैश्विक नहीं है, बल्कि प्रत्येक मॉड्यूल के लिए स्थानीय है।

मुझे उदाहरण के साथ समझाएं,

मान लें कि हमारे पास एक main.jsफ़ाइल है, जो अंदर रहती है C:/Project/main.js और node main.jsइन दोनों मानों को एक ही फ़ाइल में वापस चलाना है

या निम्नलिखित फ़ोल्डर संरचना के साथ

Project 
├── main.js
└──lib
   └── script.js

main.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

मान लीजिए कि हमारे पास script.jsपरियोजना की एक उप-निर्देशिका के अंदर एक और फाइल फाइल है, जिसे C:/Project/lib/script.jsचलाने की node main.jsआवश्यकता हैscript.js

main.js

require('./lib/script.js')
console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project
console.log(__dirname===process.cwd())
// true

script.js

console.log(process.cwd())
// C:\Project
console.log(__dirname)
// C:\Project\lib
console.log(__dirname===process.cwd())
// false

9

प्रत्येक के दायरे को जानने से चीजों को याद रखना आसान हो सकता है।

processहै nodeकी वैश्विक वस्तु, और .cwd()रिटर्न जहां नोड चल रहा है।

__dirnameकी moduleसंपत्ति है, और मॉड्यूल के फ़ाइल पथ का प्रतिनिधित्व करता है। नोड में, एक मॉड्यूल एक फ़ाइल में रहता है।

इसी तरह, __filenameएक और moduleसंपत्ति है, जो मॉड्यूल का फ़ाइल नाम रखती है।


0

$ find proj

proj
proj/src
proj/src/index.js

$ cat proj/src/index.js

console.log("process.cwd() = " + process.cwd());
console.log("__dirname = " + __dirname);

$ cd proj; node src/index.js

process.cwd() = /tmp/proj
__dirname = /tmp/proj/src
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.