В чем разница между 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.