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
'sourcetip' 카테고리의 다른 글
페이지 로드 시 Div 하단으로 스크롤(jQuery) (0) | 2023.05.13 |
---|---|
속성이 변경되었음을 알립니다.뷰 모델의 종속성 속성 (0) | 2023.05.13 |
VB.Net 속성 - 공용 Get, 개인 세트 (0) | 2023.05.13 |
이메일 주소를 신속하게 확인하는 방법은 무엇입니까? (0) | 2023.05.13 |
패턴 유형을 설정했는데 EP Plus에서 "패턴 유형이 설정되지 않으면 색상을 설정할 수 없습니다"라고 표시되는 이유는 무엇입니까? (0) | 2023.05.13 |