Tho*_*s T 7 javascript laravel webpack vue.js laravel-mix
我有一个指向我的基域的 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
Run Code Online (Sandbox Code Playgroud)
然后我的 CDN 会反映这一点,所以我希望这些资源像这样加载:
https://mycdn.com/public/js/index.js
https://mycdn.com/public/css/app.css
Run Code Online (Sandbox Code Playgroud)
我当前的webpack.mix.js配置:
mix
.sass('resources/sass/app.css', 'public/css')
.js('resources/js/index.js', 'public/js')
Run Code Online (Sandbox Code Playgroud)
它会在正确的位置生成所有文件,这很好。然后我将它们包含在我的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);
}
Run Code Online (Sandbox Code Playgroud)
它基本上在文件名前面加上 CDN url,所以一切正常。
当我使用动态导入时,问题就开始了,如下所示:
const Home = () => import("./Home")
Run Code Online (Sandbox Code Playgroud)
理想的情况是它还加载 CDN:
https://mycdn.com/public/js/1.js
但事实并非如此,它加载了相对路径和我的基本域:
https://mybasedomain.com/public/js/1.js
显然,因为它是动态的。我怎样才能让我的块也从 CDN 加载?
我尝试将其设置publicPath为我的 CDN url,但没有任何效果。我也尝试过setPublicPath()但是是一样的。
您好,这不是最终的答案,而是朝着正确方向迈出的一步。我遇到这个问题是因为我的条件导入在更新所有 webpack 和 babel 包后中断了。
动态导入之前需要将webpack的临时公共路径设置为webpack需要动态导入的chunck的位置
__webpack_public_path__ = 'https://cdn.dev.acsi.eu/eurocampings/assets/dev/dist/';
Run Code Online (Sandbox Code Playgroud)
比进口作品
import(/* webpackChunkName: "state" */ './modules/BookingState/State')
.then(({createState}) => {
createState();
this.renderEurocampingsWebsite(window);
});
Run Code Online (Sandbox Code Playgroud)
对我来说,动态导入有效,但是似乎之前的条件导入、所有包更新都在没有异步行为的情况下工作......
刚刚发现Webpack有更神奇的注释,它可以使代码表现得过程化,但代价是为了条件导入而导入了两个模块。这也可能有帮助
import(
/* webpackChunkName: "state" */
/* webpackMode: "eager" */
/* webpackPreload: true */
'./modules/BookingState/State'
)
.then...
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2350 次 |
| 最近记录: |