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.