Угловой CLI: изменить URL-адрес API REST при сборке
Я хочу удалить префикс локального сервера из URL-адресов моего REST API (например, http://localhost: 8080) при сборке для производства (ng build --prod
).
Я понимаю, что это как-то связано с файлом environment.prod.ts
, но я не могу найти никаких примеров использования их для достижения вышеупомянутого.
Было бы здорово, если бы кто-то помог мне начать!
Ответы
Ответ 1
Не производите жесткий код URL. Используйте файлы environment.prod.ts и environment.ts, которые находятся внутри src/environment. для localhost, в файле environment.ts используйте некоторую переменную, чтобы сохранить ваш url.
export const environment =
{
production: false,
API_URL: 'http://localhost:8080',
};
для производства, в environment.prod.ts
export const environment =
{
production: true,
API_URL: 'http://api.productionurl.com',
};
При использовании в вашем коде импортируйте переменную,
import { environment } from '../../environments/environment';
....
....
private API_URL= environment.API_URL;
всякий раз, когда вы используете для производства, используйте угловую команду cli command
ng build --env=prod
Содержимое файла для текущей среды перезапишет их во время сборки. Система сборки по умолчанию использует environment.ts
dev, которая использует environment.ts
, но если вы сделаете ng build --env=prod
, вместо этого будет использоваться environment.prod.ts
. Список из которых env сопоставляет, какой файл можно найти в .angular-cli.json
.
Для получения дополнительных запросов см. Https://angular.io/guide/deployment
Ответ 2
Одним из возможных способов достижения этого является определение различных базовых URL-адресов на основе isDevMode()
в вашем коде. Например,
import { isDevMode } from '@angular/core';
// ...
let baseUrl: string;
if (isDevMode()) {
baseUrl = "http://localhost:8080/";
} else {
baseUrl = "http://api.myprodserver.com/";
}
// ...
Изменение: это предназначено для иллюстрации. Вероятно, вы захотите использовать определенный тип (env-зависимый) "config" в реальном коде.
Ответ 3
Относительные URL
Добавление API_URL в конфигурацию вашей среды - хорошая идея, но если ваше API и клиентское приложение обслуживаются с одного и того же сервера или домена, вы можете вместо этого использовать относительные URL-адреса. Это намного проще в настройке и упрощает процесс сборки.
Вот некоторый код, который будет жить в службе API.
get(path: string, params: HttpParams = new HttpParams()): Observable<any> {
return this.http.get('/api${path}', { params })
.pipe(catchError(this.formatErrors));
}
Если вы используете environment.API_URL, вы все равно можете настроить это значение как пустое.
Это может быть полезно, если вы обслуживаете свое приложение и API с отдельных серверов localhost в среде разработки. Например, вы могли бы ng serve
с локального хоста: 4200 и запустить свой API из PHP, С#, Java и т.д. бэкэнда на локальном хосте: 43210. Вам понадобится конфиг API_URL для разработки.
get(path: string, params: HttpParams = new HttpParams()): Observable<any> {
return this.http.get('${environment.api_url}/api${path}', { params })
.pipe(catchError(this.formatErrors));
}
В качестве бонуса, вот пример ApiService, который является инъецируемым объектом, который вы можете использовать в своем приложении!
https://github.com/gothinkster/angular-realworld-example-app/blob/63f5cd879b5e1519abfb8307727c37ff7b890d92/src/app/core/services/api.service.ts
Также обратите внимание на базовую ссылку на главной странице HTML.
Ответ 4
Очень хорошая статья: https://davembush.github.io/where-to-store-angular-configurations/ объясняет, почему мы должны избегать файлов environment.prod.ts и environment.ts.