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 사용법
- 모듈 설치(npm install cross-env)
- scripts 명령어 수정(맨 앞에 'cross-env ' 붙이기)
예시
"scripts": {
"start": "cross-env NODE_ENV=production PORT=80 node server", // cross-env 를 명시해준다
"dev": "nodemon server",
"test": "jest"
},
댓글