프로그래밍 언어/HTML,CSS,JS

node.js에서 __dirname과 ./의 차이점

Rateye 2021. 6. 25. 10:55
728x90
반응형
질문 : node.js에서 __dirname과 ./의 차이점은 무엇입니까?

Node.js로 프로그래밍하고 현재 디렉토리와 관련하여 어딘가에있는 파일을 참조 할 때 일반 ./ __dirname 변수를 사용하는 이유가 있습니까? 지금까지 내 코드에서 ./을 사용해 왔고 방금 __dirname 의 존재를 발견했으며 본질적으로 내 ./를 변환하는 것이 현명한 지 여부를 알고 싶습니다. 그렇다면 왜 이것이 현명한 지 알고 싶습니다. 생각.

답변

Node.js에서 __dirname 은 항상 현재 실행중인 스크립트가있는 디렉토리입니다 ( this 참조 ). __dirname/d1/d2/myscript.js 을 입력하면 값은 /d1/d2 됩니다.

대조적으로 . pathfs 와 같은 라이브러리를 사용할 때 터미널 창 (예 : 작업 디렉토리)에서 node 명령을 실행 한 디렉토리를 제공합니다. 기술적으로는 작업 디렉토리로 시작하지만 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 됩니다.

dir2/pathtest.js dir1 내부에 파일을 포함 require 호출이 있으면 항상 수행 할 것입니다.

require('../thefile')
      

require 내부의 경로는 항상 호출하는 파일에 상대적이기 때문입니다. 작업 디렉토리와 관련이 없습니다.

출처 : https://stackoverflow.com/questions/8131344/what-is-the-difference-between-dirname-and-in-node-js
728x90
반응형