Фон
Я использую Angular CLI для создания проекта (с несколькими приложениями). Я хочу опубликовать приложения на отдельных подпутьях в моем домене, например example.com/apps/app1/
.
Если я установил параметр --base-href
в /apps/app1/
он решает все проблемы, связанные с маршрутизатором, и он будет загружать активы (js, css и images и т.д.) Просто отлично.
Если я использую службу Location
, я могу использовать
this.location.prepareExternalUrl('/assets/data/data.json')
для разрешения динамически загружаемых активов (они будут разрешены /apps/app1/assets/data/data.json
).
Все идет нормально. Но теперь я хочу обслуживать активы приложения через CDN, например cdn.example.com
, при размещении самого приложения на исходном url example.com/apps/app1/
. Итак, теперь я создаю приложение, используя:
ng build -prod --app app1 --base-href "/apps/app1/" --deploy-url "http://cdn.example.com/app-assets/apps/app1/"
На этот раз я применяю параметры --base-href
и --deploy-url
. Он отлично работает в том, что он использует base-href, чтобы помочь маршрутизатору разрешить URL-адрес и загружает файлы js и css из CDN. Он также решает ссылки URL-адреса изображения в файлах CSS с использованием URL-адреса CDN.
Эта проблема
При загрузке изображений или данных из папки с ресурсами динамически (в службе или шаблоне) я не могу найти хороший способ для этого разрешить URL-адреса, используя конфигурацию deploy-url
.
Если я использую службу Location
, она все еще использует base-href
для разрешения URL-адресов, поэтому
this.location.prepareExternalUrl('/assets/data/data.json')
будет по-прежнему разрешать /apps/app1/assets/data/data.json
вместо http://cdn.example.com/app-assets/apps/app1/assets/data/data.json
.
Я ожидал, что он будет использовать значение deploy-url
если оно определено, тем более, что это будет общее решение, которое будет работать при размещении файлов в одном домене и при размещении файлов во внешнем домене.
Вопрос
Есть ли способ разрешить URL-адреса активов с учетом параметров base-href
и deploy-url
?
В идеале официальная функция Angular, такая как Location.prepareExternalUrl
, но если я могу каким-то образом получить параметры base-href и deploy-url из Angular, я мог бы создать для себя собственный сервис.
Я бы не хотел определять URL-адреса в конфигурации среды, поскольку:
- Это потребует определенных конфигураций среды для каждого приложения
- Это создает потенциальный конфликт со значениями, которые предоставляются при создании приложения.