Programming/Node.js

cross-env: 동적으로 노드 서비스의 환경 변수를 관리해주는 패키지

리버김 2022. 12. 12.
nest.js로 작성된 서버를 실행하려는 과정에서 yarn start를 해도 뭔가 오류가 나면서 실행이 제대로 되지 않았다.
이유는 scripts의 서버 실행 명령어 부분에 cross-env가 적용되어 있었기 때문이다. cross-env는 노드 서비스의 환경 변수를 동적으로 변경해주는 패키지로, OS간 환경 변수 설정 방법이 다름에 따라 발생하는 호환성 문제를 해결해준다.. 노드에 환경 변수는 왜 필요하고, 이것을 동적으로 변경해준다는 의미는 무엇인지를 먼저 알아보자.

기존의 환경 변수 설정법

노드 서비스를 개발하고 배포할 때, env 환경 변수 값을 사용하여 구상한다고 한다. 그런데 process.env.NODE_ENV를 모드 마다 직접 손으로 타이핑하여 바꾸는 것은 번거롭기 때문에, 아래와 같이 scripts 명령어를 다르게 하여 그 과정을 생략할 수 있다.

 

아래와 같이 구성하면, npm start를 하면 배포 환경으로, npm run dev를 하면 개발 환경으로 웹서비스를 실행하게 되며, 환경 변수에 특정 값을 자동으로 대입해 준다.

   "scripts": {
      "start": "NODE_ENV=production PORT=80 node app", // NODE_ENV 환경변수를 production으로 PORT 환경변수를 80으로 하고 서버 실행
      "dev": "nodemon app",
   },

 

OS간 호환성 문제 발생

그러나 위와 같은 방식은 맥OS나 리눅스에서만 통용되고, 윈도우OS에서는 사용할 수 없다고 한다.

 

이를 해결하기 위해 cross-env 모듈이 있다.

 

cross-env 사용법

  1. 모듈 설치(npm install cross-env)
  2. scripts 명령어 수정(맨 앞에 'cross-env ' 붙이기)

예시

  "scripts": {
    "start": "cross-env NODE_ENV=production PORT=80 node server", // cross-env 를 명시해준다
    "dev": "nodemon server",
    "test": "jest"
  },

 

 

 

[NODE] 📚 cross-env 모듈 사용법

노드 env 환경변수 설정 보통 노드 서비스를 개발(development)하고 배포(production)할 때 env 값을 이용해서 구성한다. 예를들어 배포 모드 일 때에는 파일 캐싱, 에러 메세지 감추기 등 배포에 적합한

inpa.tistory.com

 

댓글