nest.js
window에서 env 주입이 안될 때
PJH
2022. 8. 4. 15:31
1. 문제
...
import * as dotenv from 'dotenv';
import * as path from 'path';
dotenv.config({
path : path.resolve(
(process.env.NODE_ENV === 'production') ? '.production.env' :
(process.env.NODE_ENV === 'stage') ? '.stage.env' : '.development.env'
)
});
...
/src/main.ts
"start:dev": "SET NODE_ENV=development && nest start --watch",
"start:stage": "SET NODE_ENV=stage nest && start --watch",
package.json
윈도우에서 명령어로 값을 할당하려면 SET 키워드와 &&로 구분하면 된다고 한다.
NODE_ENV 값도 올바르게 인식한다. 그러나 env 파일이 인식하지 않는다.
2. 원인
운영체제마다 인식하는 명령어가 다르다. window에서 env파일을 인식하려면 cross-env를 사용해야 한다.
cross-env는 운영체제, 플랫폼 상관없이 env 정보를 주입할 수 있게 해주는 라이브러리이다.
https://www.npmjs.com/package/cross-env
cross-env
Run scripts that set and use environment variables across platforms. Latest version: 7.0.3, last published: 2 years ago. Start using cross-env in your project by running `npm i cross-env`. There are 5200 other projects in the npm registry using cross-env.
www.npmjs.com
3. 해결
npm install --save cross-env
cross-env 설치
"start:dev": "cross-env NODE_ENV=development nest start --watch",
"start:stage": "cross-env NODE_ENV=stage nest start --watch",
package.json
다음과 같이 명령어 변경
npm run start:dev
curl -X http://localhost:3000
local.com
npm run start:stage
curl -X http://localhost:3000
test.com
실행해보니 문제없이 잘 동작한다.