Tools/Webpack

Webpack 개발 환경에 따라 환경변수 설정하기

2023. 5. 3. 00:04
목차
  1. 목표
  2. .env
  3. 1. 개발
  4. 2. 배포
  5. Dotenv
  6. DefinePlugin
  7. 사용
  8. 참고하면 좋을 글

목표

  • 개발과 배포 환경에 따른 환경변수를 설정한다.
  • 이를 위해 webpack에서 dotenv와 definePlugin을 사용한다.

 

실제 회사에서 개발 환경은 Dev, Beta, Stage, Operation(Production) 과 같이 구분됩니다.

이 환경에 대해 부르는 이름과 구성은 상이할 수 있습니다.

 

그렇지만 우리가 작업하는 로컬인 Dev와 실제 적용된 운영(Production) 환경은 공통됩니다.

 

환경에 따라 크게 다른 부분은 API의 Base URL이 있습니다.

그렇기 때문에 환경 변수를 통해 개발 환경에 따른 값을 설정할 수 있습니다.

 

이 외에도 환경변수가 필요한 경우는 API의 private한 key값을 숨겨야 하는 경우도 있습니다.

 

.env

환경변수를 설정할 파일들을 만듭니다.
이 글에서는 두 개발환경(dev, prod)에 따른 환경변수 파일을 만듭니다.


프로젝트마다 환경변수 파일의 위치는 다를 수 있습니다.
저는 root에서 생성하겠습니다.

 

환경변수 설정파일은 <KEY>=<VALUE>의 JSON 형태로 이루어져 있습니다.
value는 string입니다.

1. 개발

개발 환경(local)에서 적용될 환경변수 파일입니다.


./.env.dev

API_BASE_URL='http://localhost:8080'

2. 배포

배포되었을 때 적용될 환경변수 파일입니다.

 

/.env

API_BASE_URL='http://prod-apiurl.com:8080'

 

 

프로젝트 패키지 관리 파일인 package.json에서 npm 스크립트를 추가합니다.
로컬에서 적용될 커맨드는 NODE_ENV=development, 배포 환경은 NODE_ENV=production

 "scripts": {
    "start": "NODE_ENV=development webpack-dev-server --config webpack.dev.js --open",
    "build": "rm -rf dist && NODE_ENV=production webpack --config webpack.prod.js",
  },

 

EnvironmentPlugin은 필요하지 않습니다.

 

또한 여러명이 window, mac 다양한 OS를 이용하는 프로젝트라면 cross-env 모듈도 확인해야 합니다.

 

Dotenv

npm i -D dotenv-webpack

dotenv와는 다르니 확인하고 설치를 진행하세요.

 

dotenv란 .env 파일에 선언한 환경 변수들을 process.env에 로드해주는 zero-dependency 모듈입니다.

 

webpack 설정을 합니다.

const Dotenv = require('dotenv-webpack')

module.exports = {
    ...
  plugins: [
    new Dotenv({
      path: process.env.NODE_ENV === 'production' ? '.env' : '.env.dev',
    }),
  ],
}

 

환경에 따라 적용될 환경변수 파일을 분기처리합니다.

 

DefinePlugin

위에서 설정된 process.env 변수들은 node.js 런타임에만 존재합니다.
그래서 webpack이 빌드되는 시점에 선언해주기 위해 webpack의 내장 plugin을 이용합니다.

...
const webpack = require('webpack')

module.exports = {
    ...
  plugins: [
    ...
    new webpack.DefinePlugin({
      PRODUCTION: process.env.NODE_ENV === 'production', // 개발할 때 분기처리를 위해 선언
      API_URL: JSON.stringify(process.env.API_URL),
    }),
  ],
}

 

사용

배포 환경일 경우 분기처리를 아래의 전역변수로 이용할 수 있게 되었습니다.

function App() {
  console.log('production', PRODUCTION) // true나 false
}

 

API의 URL도 아래와 같이 사용할 수 있습니다.

{
  API_BASE_URL: process.env.API_BASE_URL
}

 

참고하면 좋을 글

개발(Development) 모드는 어떻게 작동할까?

  1. 목표
  2. .env
  3. 1. 개발
  4. 2. 배포
  5. Dotenv
  6. DefinePlugin
  7. 사용
  8. 참고하면 좋을 글
개굴이 dev
개굴이 dev
정보를 지식으로 만드는 글쓰기
개굴이 dev
개발공부
개굴이 dev
전체
오늘
어제
  • 분류 전체보기
    • 끄적끄적
    • Javascript
    • React
    • Vue
    • Web
    • HTML
    • CSS(SCSS)
    • 알고리즘
    • Server
      • Node.js
    • Database
      • Mongo
    • Tools
      • Gulp
      • Webpack
    • Design System
    • English
    • Blog

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • Algorithm
  • API
  • backend
  • Counter
  • CSS
  • dartSass
  • design system
  • designsystem
  • EDM
  • Email
  • express
  • frontend
  • github
  • gulp
  • home-brew
  • HTML5
  • java
  • Javascript
  • js
  • js-tutorial
  • macbookM1
  • MongoDB
  • node
  • nodejs
  • outlook
  • react
  • SEO
  • Server
  • task runner
  • task-runner

최근 댓글

최근 글

hELLO · Designed By 정상우.
개굴이 dev
Webpack 개발 환경에 따라 환경변수 설정하기
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.