dotenv로 .env파일에 있는 설정을 불러올때, dotenv.config()라는 함수를 쓰게 된다.
여기서 config에 아무런 옵션을 주지 않으면, node를 실행한 디렉토리에서 .env 파일을 찾게 된다.
// src.index.ts
import dotenv from 'dotenv';
async function main() {
dotenv.config();
// 로직
}
main();
로컬에서 실행하는 경우에는 보통 프로젝트 루트 디렉토리에서 실행해서 문제가 없지만, 다른 디렉토리에서 node 명령어로 실행하는 경우 .env 파일을 찾을 수 없어 에러가 발생한다.
// src.index.ts
import dotenv from 'dotenv';
async function main() {
const result = dotenv.config();
if (result.parsed) {
console.log('sucess!');
} else {
console.log('failed!');
}
// 로직
}
main();
.
├── node_modules
├──src
│ └── index.ts
├── .env
└── package.json
프로젝트 디렉토리 구조가 이렇다고 가정했을때 루트 디렉토리 . 에서 실행하면 success, 그 외의 디렉터리 ex) ./src, ../ 에서 실행하는 경우 에는 failed가 뜬다.
따라서, 모든 환경에서 .env 파일을 정상적으로 불러오고 싶다면, 절대 경로를 사용하자
나는 __dirname과 path.join 을 사용해서 이렇게 선언해 주었다.
// src.index.ts
import dotenv from 'dotenv';
import path from 'path';
async function main() {
const result = dotenv.config({ path: path.join(__dirname, '../.env') });
if (result.parsed) {
console.log('sucess!');
} else {
console.log('failed!');
}
// 로직
}
main();
창피하지만 dotenv를 사용하면서 path에 대한 생각을 한 번도 해본적이 없었고, 회사에서 만든 스크립트에서 .env 파일 위치로 헤맸기 때문에 실수를 반복하지 않고자 기록을 남기게 되었다.