-내 프로젝트의 루트에 “file.xml”이라는 파일이 있다고 가정합니다.
-테스트 파일에 “test.js”라는 테스트 파일이 있고
const file = fs.readFileSync("../file.xml");
이제 node ./tests/test.js
프로젝트의 루트에서 실행하면 ../file.xml이 존재하지 않는다고 표시됩니다. 테스트 디렉토리 내에서 동일한 명령을 실행하면 작동합니다.
fs.readFileSync는 스크립트가 실제로있는 위치가 아니라 스크립트가 호출 된 디렉토리에 상대적인 것 같습니다. fs.readFileSync("./file.xml")
test.js로 작성하면 더 혼란스러워 보이고 파일 상대 인 require 문에서 상대 경로와 일치하지 않습니다.
왜 이런거야?
fs.readFileSync에서 경로를 다시 작성하지 않으려면 어떻게해야합니까?
답변
다음을 사용하여 현재 디렉토리가 아닌 소스 파일의 위치와 관련된 경로를 확인할 수 있습니다 path.resolve
.
const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));