환경설정

webpack 환경변수 주입하기 (feat.Typescript)

위르겐 2023. 3. 15. 00:00

 

서버를 따로 구현하지 않고

S3 스토리지로 배포되어있는

데이터를 그대로 받아와야했다.

 

웹팩에서 환경변수를 주입해

axios get요청으로 데이터를 받아와보자!

 

npm install dotenv
npm install webpack-env

 

우선 

dotenv와 webpack-env

패키지를 설치한다.

 

그리고 .env 파일을 생성 후 gitignore에 넣어주자

(깃헙에 올리지 않기 위함)

 

env파일엔 

외부에 알려지지 않아야하는

클라이언트 아이디 or 시크릿키 or api주소 등이 있다.

 

API_ENDPOINT=http://localhost:3000/

위와 같은 형식으로

좌항은 대문자로 입력해야한다.

또한 문자열이라고 따옴표를 넣어주면 안된다.

 

 

웹팩으로 파일이 프로젝트가 세팅되어있으면

webpack.common.js  또는

webpack.config.js 파일이 있을텐데

 

( webpack.config.js는

webpack.common.js / webpack.dev.js / webpack.prod.js 를 머지한 결과물이다. )

 

해당 파일에 EnvironmentPlugin과

.env파일에서 생성했던 API_ENDPOINT를 이런식으로 가져온다.

module.exports = {
	...
  plugins: [
  	...
    new EnvironmentPlugin({
      API_ENDOPOINT: process.env.API_ENDOPOINT,
    }),
        ...
  ],
  	...
};

 

 

그 후 

src폴더 안에 configs폴더를 생성 한 후 

index.ts 파일을 만들어 주자

export const API_ENDPOINT = process.env.API_ENDPOINT;

여기까지 한 후에

 

환경변수를 사용하기 원하는 컴포넌트에서 

상단에 API_ENDPOINT를 import한 후

import { API_ENDPOINT } from './configs';

마음껏 사용하면 될 것 같지만

타입에러가 나온다.

 

 

 

src / types / environment.d.ts 

위의 파일을 만들어

export {};

declare global {
  namespace NodeJS {
    interface ProcessEnv {
      API_ENDPOINT: string;
    }
  }
}

여기까지 해줘야 완성..

환경변수 타입을

타입을 전역으로 사용할 수 있게 해준다.

 

마지막으로

tsconfig.json에서

{
  "compilerOptions": {
...
    "typeRoots": ["./node_modules/@types", "./src/types"],
...
}

한 줄 넣어주자 

글로벌 타입을 사용하겠다는 것이다.

 

 

 

이거 해결하려고

구글링하면서

이런저런 패키지를 설치했는데

알고보니 쓸데없는것들이어서 

지우러가야한다..

반응형