Яка різниця між
console.log(process.cwd())
і
console.log(__dirname);
Я бачив, як обидва використовуються в подібних контекстах.
Яка різниця між
console.log(process.cwd())
і
console.log(__dirname);
Я бачив, як обидва використовуються в подібних контекстах.
Відповіді:
process.cwd() повертає поточний робочий каталог,
тобто каталог, з якого ви викликали nodeкоманду.
__dirname повертає ім’я каталогу, що містить файл вихідного коду JavaScript
Відповідно до вузла js doc
process.cwd()
cwdє методом глобального об'єкта process, повертає значення рядка, яке є поточним робочим каталогом процесу Node.js.
Відповідно до вузла js doc
__dirname
Ім'я каталогів поточного сценарію як значення рядка. __dirname насправді не є глобальним, а є локальним для кожного модуля.
Поясню на прикладі,
припустимо, у нас main.jsфайл знаходиться всередині, C:/Project/main.js
і node main.jsобидва ці значення повертають один і той же файл
або просто з наступною структурою папок
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
припустимо, у нас є ще один файл script.js файлів всередині підкаталогу проекту, тобто C:/Project/lib/script.jsі працюєnode main.js , які вимагають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
Знання обсягу кожного може полегшити запам'ятовування.
processє nodeглобальним об'єктом і .cwd()повертається там, де працює вузол.
__dirnameє moduleвластивістю і представляє шлях до файлу модуля. У вузлі один модуль знаходиться в одному файлі.
Аналогічним чином __filenameє ще одне moduleвластивість, яке містить ім'я файлу модуля.
$ 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()це синонім до.всіх випадків, крімrequire()?