TIL. 90 cross-env

조윤식·2022년 9월 16일
0

cross-env

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.");
})();

이렇게 하면 환경변수를 파일로 분리하고 구동모드에 따라 다른 환경변수 파일을 로딩할 수 있기 때문에
좀 더 관리 측면에서 유용하게 활용 할 수 있다.

profile
Slow and steady wins the race

0개의 댓글