cross-env는 기본적인 환경변수 설정 방법에서 설명한 것처럼 명령줄에서 환경변수를 정의할 수 있게 하는 패키지이다. 하지만 특징이라고 한다면, window나 리눅스나 맥 등 여러 OS마다 기본적으로 명령줄에서 환경변수를 정의하는 방법이 다 제각기인데 cross-env를 사용하게 되면 이를 통일된 방법으로 환경변수를 정의할 수 있다.
이를 이용하여 명령줄을 통해 NODE_ENV라는 환경변수를 정의하여 현재 구동 모드를 development(개발 모드), production(프로덕션 모드), test(테스트 모드)로 구분하여 모드마다 각각 다른 환경변수 파일을 로드하도록 구현할 것이다.
우선 아래 명령어를 통해 cross-env를 설치한다.
npm install -D cross-env
cross-env의 사용법은 아래와 같다.
명령줄 맨 앞에 cross-env를 입력하고 "키=값"의 형태로 환경변수를 정의 한 뒤 node와 .js 파일을 입력하면 된다.
이렇게 하면 process.env.NODE_ENV를 통해 현재 구동 모드를 확인 할 수 있게 된다.
cross-env NODE_ENV=<development, production, test 중 택 1> node dist/index.js
테스트를 위해 .env 파일을 복사하여 "developent.env", "production.env", "test.env"를 만들어두자.
이제 위에서 구현했던 환경변수 로딩 코드에 NODE_ENV를 검사하여 구동 모드에 따라 다른 환경변수 파일을 가져올 수 있도록 수정한다.
(() => {
const ENV = process.env.NODE_ENV; // NODE_ENV를 변수에 저장
if (!ENV || (ENV !== "development" && ENV !== "test" && ENV !== "production")) // ENV가 유효하지 않은 모드인지 검사
throw new Error("Unknown NODE_ENV"); // 유효하지 않다면 Throwing
const result = dotenv.config({
path: path.join(__dirname, "..", ENV + ".env"), // 모드에 따라 로딩되는 환경변수 파일이
});
if (result.parsed == undefined)
throw new Error("Cannot loaded environment variables file.");
})();
이렇게 하면 환경변수를 파일로 분리하고 구동모드에 따라 다른 환경변수 파일을 로딩할 수 있기 때문에
좀 더 관리 측면에서 유용하게 활용 할 수 있다.