[node] dotenv, cross-env

Edward Hyun·2022년 4월 1일
0

backend

목록 보기
50/120

프로젝트를 하다보면
.env .env.production .env.development를 가지고
진입점을 다르게 하고 싶을 때가 많다.

예를들면,
SERVER_PORT=9000 // 공통으로 사용할 변수는 .env에 담고
DB_HOST='localhost' // 개발모드일 때 DB_HOST는 .env.development에 담고
DB_HOST='xxxx.xx.xx.xx' // 배포모드일 때 DB_HOST는 .env.production에 담는다고 치자.

이런 경우 dev, pro 모드에 따라 DB_HOST값이 바뀌어야 하고 SERVER_PORT값은 공통으로 사용해야 한다고 한다면,
NODE_ENV의 값에 따라 환경파일을 다르게 불러들여야 한다.

아래와 같이 해보자.

설치
npm i --save dotenv
npm i -g cross-env

그럴때 dotenv를 설치하고 cross-env로 실행 할 때 변수를 주입한다.

cross-env NODE_ENV=production node server.js

그리고
사용하는 곳에서 분기를 해준다. 보통 server.js에서 한 번만 config 설정 해주면 된다.

var path = require('path')
var dotenv = require('dotenv')

if (process.env.NODE_ENV === 'production') {
  dotenv.config() // for .env
  dotenv.config({ path: path.join(__dirname, '.env.production') }) // for .env.production
} else if (process.env.NODE_ENV === 'development') {
  dotenv.config() // for .env
  dotenv.config({ path: path.join(__dirname, '.env.development') }) // for .env.development
} else {
  dotenv.config() // for .env
}

그런 다음, process.env를 찍어보면 해당 env파일 내용이 들어가 있는지 확인할 수 있다.

출처::
https://velog.io/@public_danuel/process-env-on-node-js

profile
앱&웹개발(flutter, vuejs, typescript, react), 인공지능(nlp, asr, rl), 백엔드(nodejs, flask, golang, grpc, webrtc, aws, msa, nft, spring cloud, nest.js), 함수형 프로그래밍(scala, erlang)을 공부하며 정리합니다.

1개의 댓글

comment-user-thumbnail
2022년 12월 29일

dotenv config를 중복으로 쓸거면 제일 위로 올리는게 좋을 것 같내요.

dotenv.config() // for .env
if (process.env.NODE_ENV === 'production') {
dotenv.config({ path: path.join(dirname, '.env.production') }) // for .env.production
} else if (process.env.NODE_ENV === 'development') {
dotenv.config({ path: path.join(
dirname, '.env.development') }) // for .env.development
}

답글 달기