치춘짱베리굿나이스
react-app-env.d.ts 본문
react-app-env.d.ts
리액트 앱을 CRA로 초기화하고 이 파일을 아무생각 없이 webVitals
나 기타등등이랑 같이 지워줬더니 svg
파일을 불러오는 데 오류가 두두디딕 났다
다시 복구하니까 svg
파일도 잘 불러오고 정신을 차리긴 했는데 뭐하는 파일이길래 svg
로딩이 터져버렸는진 잘 모른다
따라서 정리하기로 했다
뭐 하는 파일인가요
열어보기
/// <reference types="react-scripts" />
파일을 열어보면 딱 요 한 줄 적혀있는 것을 알 수 있다
/// <reference types="node" />
/// <reference types="react" />
/// <reference types="react-dom" />
declare namespace NodeJS {
interface ProcessEnv {
readonly NODE_ENV: 'development' | 'production' | 'test';
readonly PUBLIC_URL: string;
}
}
declare module '*.avif' {
const src: string;
export default src;
}
declare module '*.bmp' {
const src: string;
export default src;
}
...
react-scripts
에 마우스를 올려 한 단계 타고 들어가면 react-app.d.ts
로 넘어가며, 위와 같은 내용이 있다
너무 길어서 적당히 잘랐는데, jpg
, jpeg
, png
, svg
, css
, scss
, sass
등의 내용이 들어있다
우리는 여기서 react-app-env.d.ts
랑 react-app.d.ts
가 대충 파일 확장자 관련이구나~ 라고 추측할 수 있겠다
그래서 뭐하는 파일인지
react-app-env.d.ts
파일은 CRA 로 초기화한 프로젝트에 적용되는, 프로젝트 환경에서 사용할 수 있는 글로벌 변수 및 모듈에 대한 유형 정의를 제공하기 위해 사용되는 선언 파일이라고 한다
타입스크립트 단독으로 사용했을 때엔 위와 같은 jpg
, png
, scss
등의 확장자를 제대로 이해하지 못하는데, 타입스크립트가 이러한 형식의 파일들을 이해할 수 있도록 도와주는 역할을 한다
- 글로벌 변수 및 모듈들을 명시적인 가져오기 없이 사용할 수 있게 해 준다
window
,document
등의 브라우저 객체,process.env
등의 Node.js 관련 객체 등의 정보를 제공하여 타입스크립트 측에서 이 객체들을 올바르게 인식할 수 있는 역할을 한다- 위와 같이 확장자들에 대한 불러오기 정보 또한 제공하여 미디어 파일들을 불러올 때에도 오류가 없게 해 준다 (그래서 이 파일을 삭제했을 때
svg
불러오기에서 오류가 났던 것…) - 이 덕분에 명시적인 가져오기 없이 변수, 객체 또는 확장자에 따른 모듈 등에 액세스하려 할 때 발생하는 오류를 막아주는 것이다
declare namespace NodeJS {
interface ProcessEnv {
readonly NODE_ENV: 'development' | 'production' | 'test';
readonly PUBLIC_URL: string;
readonly CUSTOM_ENV: string; // 추가한 내용
}
}
- 사용자 지정 환경 변수를 등록할 수 있다
.env
에 환경변수를 등록하는 것만으로는 자동완성이 안 되며, 타입을undefined
로 추론한다- 환경변수를 위와 같이
react-app-env.d.ts
에 등록하면,string
형식으로 자동으로 인식해주며 자동완성 또한 적용된다 - 위의 내용은
react-app.d.ts
에 있던NodeJS
의ProcessEnv
정의를 그대로 긁어CUSTOM_ENV
만 추가해 준 것이다
결론
react-app-env.d.ts
함부로 지우지 말자 (…)
참고 자료
'ClientSide > React' 카테고리의 다른 글
useMemo, useCallback (0) | 2023.07.24 |
---|---|
마운트와 렌더링 (0) | 2023.07.24 |
React의 useContext (0) | 2023.05.06 |
Suspense와 Error Boundary를 이용한 로딩과 예외처리 (0) | 2022.12.10 |
React를 클론코딩 #1 가상 돔 (0) | 2022.10.05 |
Comments