React Native에서 dotenv가 동작하지 않을 때
React Native에서 dotenv가 동작하지 않을 때
React Native 프로젝트에서 Firebase 설정값을 .env에서 읽어오려 했는데 값이 비어 있는 문제가 생길 수 있다.
예를 들어 다음처럼 process.env를 직접 사용하면 기대와 다르게 환경변수가 들어오지 않을 때가 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { initializeApp } from 'firebase/app';
import { getFirestore } from 'firebase/firestore';
const firebaseConfig = {
apiKey: process.env.FIREBASE_API_KEY,
authDomain: process.env.FIREBASE_AUTH_DOMAIN,
projectId: process.env.FIREBASE_PROJECT_ID,
storageBucket: process.env.FIREBASE_STORAGE_BUCKET,
messagingSenderId: process.env.FIREBASE_MESSAGING_SENDER_ID,
appId: process.env.FIREBASE_APP_ID,
};
if (!firebaseConfig.apiKey) {
console.warn('Firebase 설정값이 없습니다. .env 파일을 확인해주세요.');
}
const app = initializeApp(firebaseConfig);
export const db = getFirestore(app);
react-native-dotenv 설치
이럴 때는 react-native-dotenv를 설치하고 Babel 설정에서 .env를 import할 수 있도록 잡아준다.
1
npm install react-native-dotenv --save-dev
babel.config.js 설정
babel.config.js에 dotenv 플러그인을 추가한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
module.exports = function (api) {
api.cache(true);
return {
presets: ['babel-preset-expo'],
plugins: [
[
'module:react-native-dotenv',
{
moduleName: '@env',
path: '.env',
blacklist: null,
whitelist: null,
safe: false,
allowUndefined: true,
},
],
],
};
};
Babel은 React Native 프로젝트에서 JavaScript와 TypeScript 코드가 앱에서 실행될 수 있는 형태로 변환되는 방식을 정한다. 여기서는 @env라는 모듈 이름으로 .env 값을 가져오도록 알려주는 역할을 한다.
결론
React Native에서는 Node.js처럼 process.env가 자연스럽게 동작한다고 가정하면 헷갈릴 수 있다. Expo나 React Native 프로젝트에서는 번들링 과정에서 환경변수를 주입하는 설정이 필요하고, 그 역할을 react-native-dotenv와 Babel 설정이 맡는다.
This post is licensed under CC BY 4.0 by the author.