Загрузка фрагментов из динамического импорта c через URL-адрес CDN, как и другие ресурсы - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть CDN, указывающий на мой базовый домен, в основном сопоставление 1: 1. Я пытаюсь собрать свой пакет на сервере и хочу загрузить его, используя CDN URL. После npm run build я хочу получить следующее:

public/
  css/
    app.css
  js/
    index.js
    1.js.gz
    1.js
    2.js.gz
    2.js

И тогда мой CDN будет отражать это, поэтому я хочу, чтобы эти ресурсы загружались следующим образом:

https://mycdn.com/public/js/index.js
https://mycdn.com/public/css/app.css

Мой текущий webpack.mix.js config:

mix
  .sass('resources/sass/app.css', 'public/css')
  .js('resources/js/index.js', 'public/js')

Он генерирует все файлы в правильном месте, что хорошо. Затем я включаю их в мой index.blade.php:

<script src="{{ elixirCDN('/js/index.js') }}"></script>

elixirCDN - это моя пользовательская функция:

function elixirCDN($file)
{
    $cdn = '';

    if(config('system.cdn_url'))
    {
        $cdn = config('system.cdn_url');
    }

    return $cdn . elixir($file);
}

Она в основном добавляет имя файла к URL-адресу CDN, поэтому все работает нормально.

Проблема начинается, когда я использую динамический c импорт, например так:

const Home = () => import("./Home")

В идеальном случае он также загружается с CDN:

https://mycdn.com/public/js/1.js

но вместо этого он загружается с относительным путем и моим базовым доменом:

https://mybasedomain.com/public/js/1.js

Очевидно, потому что это Dynami c. Как я могу сделать так, чтобы мои блоки загружались из CDN?

Я пытался установить publicPath в качестве URL своего CDN, но это не имеет никакого эффекта. Я также попробовал setPublicPath(), но это то же самое.

...