Jaka jest różnica pomiędzy
console.log(process.cwd())
i
console.log(__dirname);
Widziałem oba używane w podobnych kontekstach.
Jaka jest różnica pomiędzy
console.log(process.cwd())
i
console.log(__dirname);
Widziałem oba używane w podobnych kontekstach.
Odpowiedzi:
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
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
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.
$ 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
process.cwd()jest to synonim.wszystkich przypadków z wyjątkiemrequire()?