프로젝트를 하다보면
.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파일 내용이 들어가 있는지 확인할 수 있다.
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
}