요점
Node.js에서 __dirname항상 현재 실행중인 스크립트가있는 디렉토리입니다 ( 참조 ). 사용자가 입력 그래서 만약 __dirname에 /d1/d2/myscript.js, 값이 될 것이다 /d1/d2.
반대로 and와 같은 라이브러리를 사용할 때 터미널 창에서 명령 .을 실행 한 node디렉토리 (예 : 작업 디렉토리)를 제공합니다 . 기술적으로 작업 디렉토리로 시작하지만을 사용하여 변경할 수 있습니다 .pathfsprocess.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는 항상 경로 를 호출하는 파일과 관련이 있기 때문 입니다. 작업 디렉토리와 관련이 없습니다.