Jaka jest różnica między process.cwd () a __nazwa_danych?


302

Jaka jest różnica pomiędzy

console.log(process.cwd())

i

console.log(__dirname);

Widziałem oba używane w podobnych kontekstach.

Odpowiedzi:


486

process.cwd() zwraca bieżący katalog roboczy,

tzn. katalog, z którego wywołałeś nodepolecenie.

__dirname zwraca nazwę katalogu zawierającego plik kodu źródłowego JavaScript


5
Czy to oznacza, że process.cwd()jest to synonim .wszystkich przypadków z wyjątkiem require()?
Alexander Gonchiy

10
@AlexanderGonchiy poprawny, .jest względny process.cwd()(tak synonimiczny), z wyjątkiem tego, require()który działa względem bieżącego pliku wykonawczego. Zobacz tutaj po więcej.
dwelle

1
Należy zauważyć, że bieżący katalog roboczy można zmienić w czasie wykonywania przy użyciu process.chdir, więc nie zawsze jest to katalog, z którego wywołano węzeł.
masterxilo,

84

Jak na węzeł js doc process.cwd()

cwdjest metodą obiektu globalnego process, zwraca wartość ciągu, który jest bieżącym katalogiem roboczym procesu Node.js.

Jak na węzeł js doc __dirname

Nazwa katalogu bieżącego skryptu jako wartość ciągu. __dirname nie jest w rzeczywistości globalny, ale raczej lokalny dla każdego modułu.

Pozwól mi wyjaśnić na przykładzie

załóżmy, że mamy main.jsplik w środku, C:/Project/main.js a uruchomione node main.jsobie wartości zwracają ten sam plik

lub po prostu z następującą strukturą folderów

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

załóżmy, że mamy inne pliki script.jsplików w podkatalogu projektu tj. C:/Project/lib/script.jsi działające, node main.jsktóre tego wymagają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

Znajomość zakresu każdego z nich może ułatwić zapamiętanie.

processjest nodeobiektem globalnym i .cwd()zwraca miejsce, w którym działa węzeł.

__dirnamejest modulewłaściwością i reprezentuje ścieżkę do pliku modułu. W węźle jeden moduł znajduje się w jednym pliku.

Podobnie __filenamejest modulewłaściwością innej , która przechowuje nazwę pliku modułu.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.