sourcetip

node.js에서 __dirname과 ./의 차이점은 무엇입니까?

fileupload 2023. 5. 13. 10:43
반응형

node.js에서 __dirname과 ./의 차이점은 무엇입니까?

Node.js에서 프로그래밍하고 현재 디렉터리와 관련하여 어딘가에 위치한 파일을 참조할 때,__dirname단순한 정규 대신 변수.// 지금까지 제 코드로 사용해왔고 방금 발견한 것은__dirname그리고 본질적으로 내 ./를 그것으로 변환하는 것이 현명한지, 그리고 만약 그렇다면 왜 그것이 현명한 생각인지 알고 싶습니다.

요지

Node.js에서__dirname는 항상 현재 실행 중인 스크립트가 상주하는 디렉터리입니다(이 항목 참조).그래서 만약 당신이 입력했다면.__dirname안으로/d1/d2/myscript.js가치는 다음과 같습니다./d1/d2.

대조적으로,.를 실행한 디렉토리를 제공합니다.node다음과 같은 라이브러리를 사용할 때 터미널 창(즉, 작업 디렉터리)에서 명령을 실행합니다.path그리고.fs기술적으로, 그것은 당신의 작업 디렉토리로 시작하지만, 다음을 사용하여 변경될 수 있습니다.process.chdir().

예외는 다음을 사용하는 경우입니다..와 함께require()안으로 들어가는 길require에 대한 호출이 포함된 파일에 항상 상대적입니다.require.

예를 들면...

디렉토리 구조가 다음과 같다고 가정해 보겠습니다.

/dir1
  /dir2
    pathtest.js

그리고.pathtest.js포함하다

var path = require("path");
console.log(". = %s", path.resolve("."));
console.log("__dirname = %s", path.resolve(__dirname));

당신은 그래요.

cd /dir1/dir2
node pathtest.js

당신은

. = /dir1/dir2
__dirname = /dir1/dir2

작업 디렉토리는 다음과 같습니다./dir1/dir2그래서 그런 것입니다..으로 결정합니다.부터pathtest.js위치:/dir1/dir2그것이 바로__dirname로도 해결됩니다.

그러나 스크립트를 실행하는 경우/dir1

cd /dir1
node dir2/pathtest.js

당신은

. = /dir1
__dirname = /dir1/dir2

그 경우, 당신의 작업 디렉토리는/dir1그래서 그런 것입니다..하기로 결심했지만,__dirname여전히 하기로 결심함/dir1/dir2.

사용..안에서.require...

안에 있는 경우dir2/pathtest.js당신은 가지고 있습니다.require내부에 파일을 포함하도록 호출합니다.dir1당신은 항상 그럴 입니다.

require('../thefile')

왜냐하면 그 안에 있는 길은require는 항상 호출하는 파일에 상대적입니다.작업 디렉토리와 관련이 없습니다.

./현재 작업 디렉토리를 참조합니다(단, 에서 제외).require()기능.사용 시require()번역이 됩니다../호출된 현재 파일의 디렉토리로 이동합니다. __dirname는 항상 현재 파일의 디렉터리입니다.

예를 들어 다음과 같은 파일 구조를 사용합니다.

/home/user/dir/files/config.json

{
  "hello": "world"
}

/home/user/dir/files/somefile.txt

text file

/home/user/dir/dir.js

var fs = require('fs');

console.log(require('./files/config.json'));
console.log(fs.readFileSync('./files/somefile.txt', 'utf8'));

내가 만약에cd안으로/home/user/dir그리고 실행node dir.js나는 받을 것입니다.

{ hello: 'world' }
text file

하지만 동일한 스크립트를 실행할 때/home/user/알겠습니다

{ hello: 'world' }

Error: ENOENT, no such file or directory './files/somefile.txt'
    at Object.openSync (fs.js:228:18)
    at Object.readFileSync (fs.js:119:15)
    at Object.<anonymous> (/home/user/dir/dir.js:4:16)
    at Module._compile (module.js:432:26)
    at Object..js (module.js:450:10)
    at Module.load (module.js:351:31)
    at Function._load (module.js:310:12)
    at Array.0 (module.js:470:10)
    at EventEmitter._tickCallback (node.js:192:40)

사용../와 함께 일한.require하지만 때문은 아닙니다.fs.readFileSync그 이유는fs.readFileSync,./cwd로 변환합니다(이 경우)./home/user/) 그리고./home/user/files/somefile.txt존재하지 않습니다.

언급URL : https://stackoverflow.com/questions/8131344/what-is-the-difference-between-dirname-and-in-node-js

반응형