programing

fs.readFileSync는 파일 상대적이지 않습니까?Node.js

skycolor 2023. 9. 24. 12:43
반응형

fs.readFileSync는 파일 상대적이지 않습니까?Node.js

프로젝트의 루트에 다음과 같은 파일이 있다고 가정합니다.file.xml.

내가 tests/"test.js"라는 테스트 파일을 가지고 있고 그것은

const file = fs.readFileSync("../file.xml");

지금 달려가면node ./tests/test.js나의 프로젝트의 근본에서 그것은 말합니다.../file.xml존재하지 않습니다.테스트 디렉토리 내에서 동일한 명령을 실행하면 작동합니다.

그런 것 같습니다.fs.readFileSync는 스크립트가 실제로 있는 위치가 아니라 스크립트가 호출된 디렉토리에 상대적입니다.내가 쓴다면fs.readFileSync("./file.xml")인에test.js그것은 더 혼란스러워 보일 것이고 a의 상대적인 경로와 일치하지 않습니다.require파일 상대인 문.

왜 이러한가?어떻게 하면 내 경로를 다시 쓸 필요를 피할 수 있을까요?fs.readFileSync?

현재 디렉토리가 아닌 원본 파일의 위치에 관련된 경로를 다음을 사용하여 확인할 수 있습니다.

const path = require("path");
const file = fs.readFileSync(path.resolve(__dirname, "../file.xml"));

위의 내용을 확장하자면, 만약 당신이 fs.readFileSync를 TypeScript와 함께 사용하고 있다면 (물론 일반적입니다.JS) 구문은 다음과 같습니다.

import fs from 'fs';
import path from 'path';

const logo = fs.readFileSync(path.resolve(__dirname, './assets/img/logo.svg'));

왜냐하면fs.readFileSync()현재 작업 디렉토리에 상대적으로 해결되었습니다. 자세한 내용은 Node.js 파일 시스템 문서를 참조하십시오.

출처: relative fs.readFileSync paths with Node.js

그리고 물론 커먼은JS 형식:

const fs = require('fs');
const path = require('path');

const logo = fs.readFileSync(path.resolve(__dirname, './assets/img/logo.svg'));

다음을 사용하는 경우 또 다른 대안이 있습니다.type module사용하는 것입니다process.cwd()

꾸러미의json

{
    "type": "module",
}

console.log(process.cwd() + relative_path) // /User/your_user/path_to_folder

언급URL : https://stackoverflow.com/questions/44600943/fs-readfilesync-is-not-file-relative-node-js

반응형