Programming/Node.js

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

리버김 2022. 12. 12. 14: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