Фон
Я использую 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-адреса в конфигурации среды, поскольку:
- Это потребует определенных конфигураций среды для каждого приложения
- Это создает потенциальный конфликт со значениями, которые предоставляются при создании приложения.