Чим відрізняється process.cwd () від __dirname?


302

Яка різниця між

console.log(process.cwd())

і

console.log(__dirname);

Я бачив, як обидва використовуються в подібних контекстах.

Відповіді:


486

process.cwd() повертає поточний робочий каталог,

тобто каталог, з якого ви викликали nodeкоманду.

__dirname повертає ім’я каталогу, що містить файл вихідного коду JavaScript


5
Чи означає це, що process.cwd()це синонім до .всіх випадків, крім require()?
— Олександр Гончій

10
@AlexanderGonchiy правильний, .відносно process.cwd()(так синонімічний), за винятком того, require()що працює відносно поточного виконуваного файлу. Дивіться тут докладніше.
— пробудьте

1
Зауважте, що поточний робочий каталог можна змінити під час виконання за допомогою process.chdir, тому це не завжди каталог, з якого визивався вузол.
— masterxilo

84

Відповідно до вузла 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

9

Знання обсягу кожного може полегшити запам'ятовування.

processє nodeглобальним об'єктом і .cwd()повертається там, де працює вузол.

__dirnameє moduleвластивістю і представляє шлях до файлу модуля. У вузлі один модуль знаходиться в одному файлі.

Аналогічним чином __filenameє ще одне moduleвластивість, яке містить ім'я файлу модуля.


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.