какая разница между
console.log(process.cwd())
и
console.log(__dirname);
Я видел, как используются в одинаковых контекстах.
какая разница между
console.log(process.cwd())
и
console.log(__dirname);
Я видел, как используются в одинаковых контекстах.
Ответы:
process.cwd() возвращает текущий рабочий каталог,
т.е. каталог, из которого вы вызвали nodeкоманду.
__dirname возвращает имя каталога, содержащего файл исходного кода JavaScript
По узлу 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
Знание объема каждого может облегчить запоминание.
processявляется nodeглобальным объектом и .cwd()возвращает, где работает узел.
__dirnamemoduleСвойство is и представляет путь к файлу модуля. В узле один модуль находится в одном файле.
Точно так же __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()?