【问题标题】:Laravel vuejs from sub directory image not showing来自子目录图像的 Laravel vuejs 未显示
【发布时间】:2021-10-05 06:18:17
【问题描述】:

最近我正在使用vuejs 我的项目在子目录中,其中我的图像未显示来自public/images/ 目录我搜索了很多找到许多解决方案,但对我没有任何帮助。但在本地运行良好。

代码示例

主页.vue

<div class="widget-bg-image absolute">
  <div class="widget-container">
    <div class="image">
      <img width="629" height="424" src="/images/big-banner/3.png" class="img-fluid" alt="">
    </div>
  </div>
</div>

我在webpack.mix.js 中设置了根路径,比如mix.setResourceRoot('/subdirectory/'),但什么也没发生我还设置了公共路径,比如mix.setPublicPath('/subdirectory/')

我试过了:

webpack.mix.js

mix.js('resources/js/app.js', 'public/js').vue()
   .sass('resources/sass/app.scss', 'public/css')
   .webpackConfig(require('./webpack.config'))

if (mix.inProduction()) {
    mix.version();
    mix.setResourceRoot(`/${process.env.BASE_URL}/`)
}

我想要我的图片路径

  <img width="629" height="424" src="my-host/subdirectory/images/big-banner/3.png">

还有其他方法吗?请帮帮我

【问题讨论】:

    标签: laravel vue.js vuejs2 laravel-mix


    【解决方案1】:

    BASE_URL 设置为您的项目。在.env文件集中

    BASE_URL=my-host/subdirectory/
    

    设置

    <img width="629" height="424" src={process.env.BASE_URL + "images/big-banner/3.png"}>
    

    【讨论】:

    • 然后我在哪里设置BASE_URL..?可以详细解释一下吗
    • 在 .env 文件中设置BASE_URL
    • 没有错误,但是 url 从主机而不是从子目录获取
    【解决方案2】:

    我的方法是在刀片模板中添加全局视图模型配置对象 (VM):

    @section('footer')
    <script>
        var vm = {
            root: '{{ url('/') }}' + "/",    // could include other variables as well, such as translations and/or session-objects from PHP
        } 
    </script>
    @endsection
    

    我使用的是 Vue 3,所以我将此变量添加到 Vue 应用程序:

    app.config.globalProperties.$vm = window.vm;
    
    // or in Vue 2
    
    Vue.prototype.$vm = window.vm;
    

    这样您就可以将图片的根路径添加到模板中:

    <img :src="$vm.root + 'images/file.jpg'" />
    

    只要您可以使用浏览器在该网址访问文件,就可以了。否则问题可能是文件在给定的 url 上并不真正存在,所以如果有任何问题,请检查路径。

    【讨论】:

    • 这样,组件问题会解决,但我如何在 CSS 文件中做到这一点background-image
    • 在考虑答案时,我不会以这种方式混合 vue、css(scss) 和 webkit,即使其他解决方案也可以。相反,我会简单地考虑一个问题“我如何将 PHP 配置变量传递给 CSS/SCSS?”的解决方案。也许joelennon.com/… 可能是一个答案?其他解决方案可能是在刀片模板中使用内联 css 样式来设置 url,就像我为 VM 所做的那样。据我所知,基本 Laravel 安装中没有包含用于 SCSS 解析器的原生 PHP/Laravel。这不是 Laravel 特有的问题。
    • 另外,我不确定您要完成什么。如果问题是您在 www.somehost.com/subdirectory/ 中运行 Laravel 项目并且您的 css 指向 www.somehost.com/images/file.jpg ,那么问题可能是您在背景中有绝对路径-图片网址而不是相对于您的公共目录。您是否尝试过从图像网址中删除第一个斜杠字符?因为第一个斜杠告诉您从域的根目录搜索图像文件夹。
    • 解决方案可能很简单:看起来 Laravel Mix 应该能够像 Sharma 回答的那样重写 url。不过,请查看laravel.com/docs/8.x/mix#url-processing(或类似的旧版本)。有一个红色感叹号说明绝对网址(以斜杠开头)不会被重写。如果您有类似 url('/images/file.jpg') 的内容,这可能是问题的根源。您很可能也不需要 SCSS 的 env 变量,因为 webpack 应该开箱即用地处理 url 生成。
    猜你喜欢
    • 2021-06-15
    • 2015-10-06
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-04
    • 2016-01-28
    相关资源
    最近更新 更多