В чем разница между process.cwd () и __dirname?


304

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

console.log(process.cwd())

и

console.log(__dirname);

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

Ответы:


488

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

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

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


5
Означает ли это, что process.cwd()является синонимом .для всех случаев, кроме require()?
Александр Гончий

11
@AlexanderGonchiy правильно, .относительно process.cwd()(так синонимично), за исключением того, require()что работает относительно текущего исполняемого файла. Смотрите здесь для получения дополнительной информации.
dwelle

1
Обратите внимание, что текущий рабочий каталог можно изменить во время выполнения, используя process.chdir, поэтому это не всегда каталог, из которого был вызван узел.
masterxilo

85

По узлу JS док process.cwd()

cwdявляется методом глобального объекта process, возвращает строковое значение, которое является текущим рабочим каталогом процесса Node.js.

По узлу JS док __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()возвращает, где работает узел.

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

Точно так же __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.