Какая разница между process.cwd() и __dirname?

Какая разница между

console.log(process.cwd())

и

console.log(__dirname);

Я видел, что оба используются в аналогичных контекстах.

Ответ 1

process.cwd() возвращает текущий рабочий каталог,

то есть. каталог, из которого вы вызывали команду node.

__dirname возвращает имя каталога, содержащую исходный код JavaScript

Ответ 2

По узлу 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

Ответ 3

Знание объема каждого может облегчить запоминание.

process - это глобальный объект node, и .cwd() возвращает место, где работает узел.

__dirname является свойством module и представляет путь к файлу модуля. В узле один модуль находится в одном файле.

Аналогично, __filename - это еще одно свойство module, которое содержит имя файла модуля.