Process.cwd () vs __dirname arasındaki fark nedir?


304

Arasındaki fark nedir

console.log(process.cwd())

ve

console.log(__dirname);

Her ikisinin de benzer bağlamlarda kullanıldığını gördüm.

Yanıtlar:


488

process.cwd() geçerli çalışma dizinini döndürür,

yani nodekomutu çağırdığınız dizin .

__dirname JavaScript kaynak kodu dosyasını içeren dizinin dizin adını döndürür


5
Bu, bunun dışındaki tüm durumlar için process.cwd()eşanlamlı olduğu anlamına mı geliyor ? .require()
Alexander Gonchiy

11
@AlexanderGonchiy doğru, .göreceli olan process.cwd()hariç için, (bu yüzden ayn) require()mevcut yürütme dosyasına göre çalıştığı. Daha fazlası için buraya bakın .
Dwelle

1
Geçerli çalışma dizininin çalışma zamanında process.chdir kullanılarak değiştirilebileceğini unutmayın, bu nedenle her zaman düğümün çağrıldığı dizin değildir.
masterxilo

85

Düğüm başına js doc process.cwd()

cwdbir global nesne yöntemidir process, Node.js işleminin geçerli çalışma dizini olan bir dize değeri döndürür.

Düğüm başına js doc __dirname

Geçerli betiğin dize değeri olarak dizin adı. __dirname aslında küresel değil, her modül için yereldir.

Örnekle açıklayayım,

varsayalım ki içinde bir main.jsdosya var C:/Project/main.js ve node main.jsher iki değeri de aynı dosyaya döndürüyoruz

veya sadece aşağıdaki klasör yapısıyla

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

Başka bir dosya olduğunu varsayalım script.jsproje yani bir alt dizinine içindeki dosyaları C:/Project/lib/script.jsve koşmanode main.js gerektirenscript.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

Her birinin kapsamını bilmek şeyleri hatırlamayı kolaylaştırabilir.

process, nodeglobal nesnesidir ve .cwd()düğümün çalıştığı yere döner.

__dirnameolan modulebireyin mülkiyet ve modülün dosya yolunu temsil eder. Düğümde, bir modül bir dosyada bulunur.

Benzer şekilde, modülün dosya adını tutan __filenamebaşka bir moduleözelliktir.


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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.