Home expo 환경변수설정
Post
Cancel

expo 환경변수설정

환경

  • “expo”: “~47.0.8”
  • “react-native”: “0.70.5”
1
2
> eas -v
eas-cli/3.5.2 win32-x64 node-v18.13.0

소스

package.json

1
2
3
4
5
6
7
8
9
10
11
12
13
...
"scripts": {
  ...
  "start-win-local": "set APP_ENV=local&expo start", // 로컬에서 expo  api서버 둘다 실행(window)
  "start-win-dev": "set APP_ENV=development&expo start", // 로컬에서 expo 실행  api 서버는 개발서버 사용(window)
  "start-ios-local": "APP_ENV=local expo start", // 로컬에서 expo  api서버 둘다 실행(mac)
  "start-ios-dev": "APP_ENV=development expo start", // 로컬에서 expo 실행  api 서버는 개발서버 사용(mac)
  "build-dev-android": "eas build -p android --profile development", // API개발서버를 바라보고 android용으로 빌드
  "build-dev-ios": "eas build -p ios --profile development", // API개발서버를 바라보고 IOS용으로 빌드
  "build-android": "eas build -p android --profile production", // API운영서버를 바라보고 android용으로 빌드
  "build-ios": "eas build -p ios --profile production" // API운영서버를 바라보고 IOS용으로 빌드
},
...

핵심은 로컬에서 실행시엔 APP_ENV=(local|development|production)로 환경 변수를 넣어주고, 빌드시엔 --profile (development|production) 으로 profile을 지정

eas.json

eas를 이용하여 빌드시 development, production 두 개의 profile을 설정하고 env.APP_ENV의 항목을 항목별로 설정

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
{
  "cli": {
    "version": ">= 3.4.1"
  },
  "build": {
    "development": {
      "ios": {
        "resourceClass": "m1-medium"
      },
      "android": {
        "buildType": "apk"
      },
      "env": {
        "APP_ENV": "development"
      }
    },
    "production": {
      "ios": {
        "resourceClass": "m1-medium"
      },
      "android": {
        "buildType": "apk"
      },
      "env": {
        "APP_ENV": "production"
      }
    }
  },
  "submit": {
    "production": {}
  }
}

app.config.js

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
const ENV = {
  local: {
    APP_ENV: "local",
    apiUrl: "http://localhost:3000/m",
  },
  development: {
    APP_ENV: "development",
    apiUrl: "http://development:3000/m",
  },
  production: {
    APP_ENV: "production",
    apiUrl: "http://production/m",
  },
};

// config는 app.json의 내용
module.exports = ({ config }) => {
  let env = ENV.production;
  if (process.env.APP_ENV === "local") {
    env = ENV.local;
  } else if (process.env.APP_ENV === "development") {
    env = ENV.development;
  }

  // extra에 환경별 변수를 추가
  return {
    ...config,
    extra: {
      ...config.extra,
      ...env,
    },
  };
};

사용

로컬에서 실행했을 경우

1
yarn start-win-local
1
2
3
4
import Constants from "expo-constants";

console.log(Constants.manifest.extra.APP_ENV); // local
console.log(Constants.manifest.extra.apiUrl); // http://localhost:3000/m
This post is licensed under CC BY 4.0 by the author.