图片具有绝对路径-如何在LaravelMix中使用子目录URL

kir*_*ern 4 laravel vue.js laravel-mix

我的Laravel Mix应用程序将放置在服务器上的子目录中,例如:http:// localhost / pat-os-server / public /

我的Vue组件中的图像路径从

<img id="logo" src="../assets/img/pat_logo.png">
Run Code Online (Sandbox Code Playgroud)

<img id="logo" src="/images/pat_logo.png">
Run Code Online (Sandbox Code Playgroud)

现在由于应用程序所在的子目录而未显示该图像。正确的路径应该是images / pat_logo.png(相对-首选)或/pat-os-server/public/images/pat_logo.png(绝对)

我试图像这样在webpack.mix.js中设置输出路径:

mix.setPublicPath('/pat-os-server/public/');
mix.setResourceRoot('/pat-os-server/public/');
Run Code Online (Sandbox Code Playgroud)

但这并不会改变输出路径。仍然是/images/pat_logo.png。我希望它现在是/pat-os-server/public/images/pat_logo.png。对setPublicPath和setResourceRoot使用其他值(包括“ /”和“”)不会造成任何差异。

我已经在调用其他方法之前放置了路径设置方法,所以当前的webpack.mix.js如下所示:

const { mix } = require('laravel-mix');

mix.setPublicPath('/pat-os-server/public/');
mix.setResourceRoot('/pat-os-server/public/');
mix.js('resources/assets/js/app.js', 'public/js')
   .sass('resources/assets/sass/app.scss', 'public/css');
Run Code Online (Sandbox Code Playgroud)

如何获得图像的相对输出路径或更改绝对路径?

感谢您的支持。

编辑

我刚刚意识到,在我的laravel项目中创建了一个子文件夹“ pat-os-server”,并将所有编译的项目文件复制到该子文件夹中。所以看来我误解了setPublicPath设置。

希望将输出文件放置到另一个文件夹。我希望项目中的URL指向正确的路径,该路径不是主机/根目录,而是子目录。

kir*_*ern 8

经过几个小时的搜索和试用,回答了我自己的问题。

现在我的webpack.mix.js看起来像这样:

const { mix } = require('laravel-mix');
mix
  .setResourceRoot("")
  .js('resources/assets/js/app.js', 'public/js')
  .sass('resources/assets/sass/app.scss', 'public/css');
Run Code Online (Sandbox Code Playgroud)

这将产生漂亮的相对URL:

<img id="logo" src="images/pat_logo.png">
Run Code Online (Sandbox Code Playgroud)

更多例子

使用mix.setResourceRoot("/")获得的绝对路径根(应该是默认值):

<img id="logo" src="/images/pat_logo.png">
Run Code Online (Sandbox Code Playgroud)

或使用其他类似的东西mix.setResourceRoot("anything/there/")

<img id="logo" src="anything/there/images/pat_logo.png">
Run Code Online (Sandbox Code Playgroud)

干杯