환경
- “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
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
|