Я пытаюсь развернуть проект Laravel + Vue JS в Laravel Vapor. Все работает, как и ожидалось, за исключением моих фоновых изображений, примененных с использованием стилей в однофайловом компоненте Vue JS. URL указывает на мой домен / экземпляр lamba, а не на cdn, предоставленный Vapor.
Мой существующий стиль, который работает в моей локальной среде:
.slide1 {
background-image: url("/images/banner1.jpg");
}
При развертывании для создания образаURL-адрес: https://damp -pine-l46hzzzbsa5p.vapor-farm-a1.com / images / banner1.jpg
И возвращает 404, как ожидается, будет URL-адресCDN.
Когда я использую изображение из файла основного блейда, URL-адрес изображения переписывается в: https://d16wfy3cif7yy.cloudfront.net/e9ce46ed-bf61-4c85-8bd0-b136f1d15a33/images/banner1.jpg, как и ожидалось.
Я предпринял несколько попыток следовать другим постам, связанным ск URL-адресам vue-js / laravel-mix, однако все не удалось, и большинство из них даже не позволяют запускать npm без ошибок.
После дальнейших исследований кажется, что я пропустил часть документации по парам:https://docs.vapor.build/1.0/projects/deployments.html#code-splitting-dynamic-imports, который говорит о динамическом импорте. Это, очевидно, намеченный способ сделать это, вместо того, чтобы переписать пар-кли, но я не могу всю жизнь заставить его работать.
Я попытался добавить предложенный код в свой веб-пакет. смешать файл, и все равно не повезло. URL-адреса изображений по-прежнему указывают на домен, а не на cdn.
Я также следил за многими учебными пособиями / вопросами переполнения стека, в которых говорится об относительных ресурсах против модулей, и после любого из этих действий npm выдает ошибку, котораяизображение не может быть разрешено.
Мой файл webpack.mix.js:
const mix = require('laravel-mix');
/*
|--------------------------------------------------------------------------
| Mix Asset Management
|--------------------------------------------------------------------------
|
| Mix provides a clean, fluent API for defining some Webpack build steps
| for your Laravel application. By default, we are compiling the Sass
| file for the application as well as bundling up all the JS files.
|
*/
mix.js('resources/js/app.js', 'public/js')
.sass('resources/sass/app.scss', 'public/css');
if (mix.inProduction()) {
const ASSET_URL = process.env.ASSET_URL + "/";
mix.webpackConfig(webpack => {
return {
plugins: [
new webpack.DefinePlugin({
"process.env.ASSET_PATH": JSON.stringify(ASSET_URL)
})
],
output: {
publicPath: ASSET_URL
}
};
});
}
А это мой vue-компонент, который неправильно загружает изображения
<template>
<div class="heroheader-container">
<carousel
:scrollPerPage="false"
:perPage="1"
:autoplay="true"
:autoplay-timeout="4000"
:autoplay-hover-pause="true"
:loop="true"
:pagination-enabled="false"
>
<slide class="slide slide1">
<div class="slide-content">
</div>
</slide>
<slide class="slide slide2">Slide 2</slide>
<slide class="slide slide3">Slide 3</slide>
</carousel>
</div>
</template>
<script>
export default {
data() {
return {
//
};
}
};
</script>
<style>
:root {
--carousel-height: 75vh;
}
.heroheader-container {
width: 100%;
margin-left: 0px;
padding: 0px;
top: 0px;
position: absolute;
}
.carousel {
width: 100%;
height: var(--carousel-height);
}
.slide1 {
background-image: url("/images/banner2.jpg");
}
.slide2 {
background-image: url("/images/banner3.jpg");
}
.slide3 {
background-image: url("/images/banner4.jpg");
}
.slide {
background-position: center center;
background-size: cover;
height: var(--carousel-height);
padding-top: 150px;
}
.slide-content {
position: relative;
text-align: center;
color: #efefef;
}
</style>
Как разработчик PHP (Новое в vue), я разветвил и отредактировал laravel /apor-cli примерно за 5 минут, чтобы переписать эти URL-адреса стилей в скомпилированном js. Это работает, однако кажется, что есть лучший способ, я просто что-то упустил! Любая помощь будет оценена.