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.