Qual é a diferença entre process.cwd () vs __dirname?


303

Qual é a diferença entre

console.log(process.cwd())

e

console.log(__dirname);

Eu já vi os dois usados ​​em contextos semelhantes.

Respostas:


487

process.cwd() retorna o diretório de trabalho atual,

ou seja, o diretório a partir do qual você chamou o nodecomando.

__dirname retorna o nome do diretório que contém o arquivo de código-fonte JavaScript


5
Isso significa que process.cwd()é sinônimo .para todos os casos, exceto para require()?
Alexander Gonchiy

11
@AlexanderGonchiy correto, .é relativo a process.cwd()(tão sinônimo), exceto pelo require()que funciona em relação ao arquivo em execução atual. Veja aqui para mais.
dwelle

1
Observe que o diretório de trabalho atual pode ser alterado em tempo de execução usando process.chdir; portanto, nem sempre é o diretório a partir do qual o nó foi chamado.
masterxilo 5/01

85

Conforme o nó js doc process.cwd()

cwdé um método de objeto global process, retorna um valor de sequência que é o diretório de trabalho atual do processo Node.js.

Conforme o nó js doc __dirname

O nome do diretório do script atual como um valor de sequência. __dirname não é realmente global, mas local para cada módulo.

Deixe-me explicar com exemplo,

suponha que tenhamos um main.jsarquivo dentro C:/Project/main.js e executando node main.jsesses dois valores retornem o mesmo arquivo

ou simplesmente com a seguinte estrutura de pastas

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

suponha que tenhamos outros script.jsarquivos dentro de um subdiretório do projeto, ou sejaC:/Project/lib/script.js e executandonode main.js que exijascript.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

Conhecer o escopo de cada um pode facilitar a lembrança.

processé nodeo objeto global de e .cwd()retorna onde o nó está sendo executado.

__dirnameé modulea propriedade de e representa o caminho do arquivo do módulo. No nó, um módulo reside em um arquivo.

Da mesma forma, __filenameé outra modulepropriedade, que contém o nome do arquivo do módulo.


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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.