Javascript 像其他资产一样,通过CDN URL从动态导入加载块

Javascript 像其他资产一样,通过CDN URL从动态导入加载块,javascript,laravel,vue.js,webpack,laravel-mix,Javascript,Laravel,Vue.js,Webpack,Laravel Mix,我有一个CDN指向我的基本域,基本上是1:1映射。我试图在服务器上构建我的包,我想使用CDN URL加载它。在npm运行构建之后,我想要的是: 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/pu

我有一个CDN指向我的基本域,基本上是1:1映射。我试图在服务器上构建我的包,我想使用CDN URL加载它。在
npm运行构建之后,我想要的是:

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
const Home = () => import("./Home")
我当前的
webpack.mix.js
config:

mix
  .sass('resources/sass/app.css', 'public/css')
  .js('resources/js/index.js', 'public/js')
它在正确的位置生成所有文件,这很好。然后我将它们包括在我的
index.blade.php
中:

elixirCDN是我的自定义函数:

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

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

    return $cdn . elixir($file);
}
它基本上是在文件名前面加上CDN url,所以一切正常

当我使用动态导入时,问题就开始了,如下所示:

https://mycdn.com/public/js/index.js
https://mycdn.com/public/css/app.css
const Home = () => import("./Home")
理想情况是,它还加载CDN:

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

但是,它没有,它加载了一个相对路径和我的基本域:

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

显然,因为它是动态的。如何使我的块也从CDN加载


我尝试将
publicPath
设置为我的CDN url,但没有任何效果。我也尝试过
setPublicPath()
,但都是一样的。

嗨,这不是一个确定的答案,而是朝着正确方向迈出的一步。我陷入这个问题是因为我的条件导入在更新了所有的webpack和babel包之后中断了

在动态导入之前,您需要将webpack的临时公共路径设置为需要动态导入webpack的Chunpack的位置

__webpack_public_path__ = 'https://cdn.dev.acsi.eu/eurocampings/assets/dev/dist/';
比进口更有效

import(/* webpackChunkName: "state" */ './modules/BookingState/State')
        .then(({createState}) => {
            createState();
            this.renderEurocampingsWebsite(window);
        });
对我来说,动态导入是有效的,但是之前的条件导入,所有的包更新,都是在没有异步行为的情况下工作的

刚刚发现Webpack有更多神奇的注释,这可以使代码表现为过程性的,代价是为条件导入导入两个模块。这可能也有帮助

import(
            /* webpackChunkName: "state" */
            /* webpackMode: "eager" */
            /* webpackPreload: true */
            './modules/BookingState/State'
        )
        .then...