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

실행해보니 문제없이 잘 동작한다.