프로젝트에 development, staging과 같이 이름이 있는 빌드 설정을 여러 개 정의하고 서로 다른 기본값을 지정할 수 있습니다.
이름이 있는 각 설정에는 build, serve, test 등 다양한 빌더 대상에 적용되는 옵션의 기본값을 지정할 수 있습니다.
그러면 Angular CLI의 build, serve, test 명령어가 대상 환경에 맞는 파일로 교체할 수 있습니다.
Angular CLI 설정
Angular CLI 빌더는 configurations 객체를 지원합니다.
이 객체를 사용하면 명령줄에서 지정한 설정에 따라 빌더의 특정 옵션을 덮어쓸 수 있습니다.
{
"projects": {
"my-app": {
"architect": {
"build": {
"builder": "@angular/build:application",
"options": {
// 기본적으로 소스 맵을 생성하지 않습니다.
"sourceMap": false
},
"configurations": {
// `debug` 설정에서는 소스 맵을 생성합니다.
"debug": {
"sourceMap": true
}
}
},
…
}
}
}
}
사용할 설정은 --configuration 옵션으로 선택합니다.
ng build --configuration debug
설정은 모든 Angular CLI 빌더에 적용할 수 있습니다. 쉼표로 구분해서 여러 설정을 지정할 수도 있습니다. 설정은 지정한 순서대로 적용되며, 옵션이 충돌하면 마지막 설정의 값을 사용합니다.
ng build --configuration debug,production,customer-facing
환경별 기본값 설정하기
@angular/build:application은 빌드 실행 전에 소스 파일을 다른 파일로 바꾸는 파일 교체 옵션을 지원합니다.
이 옵션을 --configuration과 함께 사용하면 애플리케이션의 환경별 데이터를 설정할 수 있습니다.
먼저 환경 파일 생성 명령어를 실행해서 src/environments/ 디렉터리를 만들고 프로젝트가 파일 교체 기능을 사용하도록 설정하세요.
ng generate environments
프로젝트의 src/environments/ 디렉터리에는 프로덕션 기본 설정을 제공하는 기본 설정 파일 environment.ts가 있습니다.
development, staging 등의 추가 환경에서는 대상별 설정 파일로 기본값을 덮어쓸 수 있습니다.
예를 들면 다음과 같습니다:
my-app/src/environments
├── environment.development.ts
├── environment.staging.ts
└── environment.ts
기본 파일인 environment.ts에는 기본 환경 설정이 들어 있습니다.
예를 들면 다음과 같습니다:
export const environment = {
production: true,
};
환경을 지정하지 않으면 build 명령어는 이 설정을 빌드 대상으로 사용합니다.
환경 객체에 프로퍼티를 추가하거나 별도 객체를 만들어 변수를 더 추가할 수 있습니다.
예를 들어 기본 환경에 변수의 기본값을 추가하면 다음과 같습니다:
export const environment = {
production: true,
apiUrl: 'http://my-prod-url',
};
중요: src/environments/의 파일은 클라이언트 애플리케이션에 번들로 포함되며 페이지에 접속하는 누구나 볼 수 있습니다.
API 키와 같은 비밀 정보를 여기에 저장하면 안 됩니다.
대신 서버 측 프록시나 비밀 정보 관리 도구를 사용하세요.
environment.development.ts와 같은 대상별 설정 파일을 추가할 수 있습니다.
다음 내용은 개발 빌드 대상의 기본값을 설정합니다:
export const environment = {
production: false,
apiUrl: 'http://my-dev-url',
};
앱에서 환경별 변수 사용하기
정의한 환경 설정을 사용하려면 컴포넌트에서 원래 환경 파일을 가져와야 합니다:
import {environment} from './environments/environment';
그러면 빌드 및 실행 명령어가 특정 빌드 대상에 맞는 설정을 찾을 수 있습니다.
다음 컴포넌트 파일(app.ts)의 코드는 설정 파일에 정의된 환경 변수를 사용합니다.
import {environment} from './../environments/environment';
// 프로덕션에서는 `http://my-prod-url`, 개발 환경에서는 `http://my-dev-url`에서 데이터를 가져옵니다.
fetch(environment.apiUrl);
CLI의 기본 설정 파일 angular.json에서 각 빌드 대상의 설정에는 fileReplacements 항목을 지정할 수 있습니다.
이를 통해 TypeScript 프로그램의 파일을 해당 대상에 맞는 파일로 교체할 수 있습니다.
프로덕션이나 스테이징처럼 특정 환경을 대상으로 빌드할 때 해당 환경에 맞는 코드나 변수를 포함하는 데 유용합니다.
기본적으로는 파일을 교체하지 않지만 ng generate environments를 실행하면 이 설정이 자동으로 추가됩니다.
angular.json 설정을 직접 편집해서 특정 빌드 대상의 파일 교체 설정을 수정하거나 추가할 수 있습니다.
"configurations": {
"development": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.development.ts"
}
],
…
이 설정에서는 ng build --configuration development로 개발 설정을 빌드하면 src/environments/environment.ts 파일이 대상별 파일인 src/environments/environment.development.ts로 교체됩니다.
스테이징 환경을 추가하려면 src/environments/environment.ts를 src/environments/environment.staging.ts라는 이름으로 복사한 뒤 angular.json에 staging 설정을 추가하세요:
"configurations": {
"development": { … },
"production": { … },
"staging": {
"fileReplacements": [
{
"replace": "src/environments/environment.ts",
"with": "src/environments/environment.staging.ts"
}
]
}
}
이 대상 환경에 다른 설정 옵션도 추가할 수 있습니다. 빌더가 지원하는 옵션은 모두 빌드 대상 설정에서 덮어쓸 수 있습니다.
스테이징 설정으로 빌드하려면 다음 명령어를 실행하세요:
ng build --configuration staging
기본적으로 build 대상에는 production과 development 설정이 포함되며 ng serve는 애플리케이션의 개발 빌드를 사용합니다.
buildTarget 옵션을 지정하면 ng serve가 특정 빌드 설정을 사용하도록 구성할 수도 있습니다:
"serve": {
"builder": "@angular/build:dev-server",
"options": { … },
"configurations": {
"development": {
// `build` 대상의 `development` 설정을 사용합니다.
"buildTarget": "my-app:build:development"
},
"production": {
// `build` 대상의 `production` 설정을 사용합니다.
"buildTarget": "my-app:build:production"
}
},
"defaultConfiguration": "development"
},
defaultConfiguration 옵션은 기본으로 사용할 설정을 지정합니다.
defaultConfiguration을 지정하지 않으면 options를 수정 없이 그대로 사용합니다.