Laravel vue SFC中映像src的最佳实践是什么?
我正在使用Laravel 5.8和Vue 2.6,并尝试在我的单文件组件中使用图像文件的相对路径。我已经回顾了本报告中的建议 但却无法让它发挥作用 尝试时:Laravel vue SFC中映像src的最佳实践是什么?,laravel,vue.js,webpack,vue-component,Laravel,Vue.js,Webpack,Vue Component,我正在使用Laravel 5.8和Vue 2.6,并尝试在我的单文件组件中使用图像文件的相对路径。我已经回顾了本报告中的建议 但却无法让它发挥作用 尝试时: <template> <div id="app"> <img src="./assets/logo.png"> </div> </template> <script> export default { } </script> <st
<template>
<div id="app">
<img src="./assets/logo.png">
</div>
</template>
<script>
export default {
}
</script>
<style lang="scss">
</style>
导出默认值{
}
我明白了:
找不到此相对模块:
*./node_modules/vue loader/lib/loaders/templateLoader.js中的/assets/logo.png??vue loader options/节点_模块/vue加载程序/lib?
?vue加载程序选项/resources/js/components/xxxx.vue?vue&type=template&id=abd0e146&scoped=true&
当我尝试时:
<template>
<div id="app">
<img :src="image" />
</div>
</template>
<script>
import image from "./assets/logo.png"
export default {
data: function () {
return {
image: image
}
}
}
</script>
<style lang="scss">
</style>
从“/assets/logo.png”导入图像
导出默认值{
数据:函数(){
返回{
图像:图像
}
}
}
我得到:
找不到此相对模块:
*./assets/logo.png在./node_modules/babel loader/lib??ref--4-0/节点\模块/vue加载程序/lib??vue加载程序选项/resources/js/components/xxxx.vue?vue&type=script&lang=js&
我是否缺少webpack mix或vue loader
编辑:
使用简单静态引用(src=“/assets/logo.png”)可以在本地开发服务器上工作,但不能在生产服务器上工作
我已经看到了许多关于这个基本图像文件引用的建议解决方案,但困惑的是,有这么多的可能性,而没有一个最佳实践。同样,希望在开发和生产中使用Laravel/Laravel Mix/Vue和SFC时找到最佳实践。使用
这将使用webpack并创建logo.png的哈希版本。
或在JS中使用:
:src=“require('@/assets/logo.png');
在设置中使用图像有两种方法:
与网页包捆绑
这些包使用webpack捆绑图像,使用此解决方案,您可以获得以下好处:
- 使用base64自动内联小图像
- 使用任何网页包加载程序进行自动“深度”压缩
- Path可从应用程序中的每个路径运行
- 编译时检查文件是否存在
- 无需重建前端即可轻松切换到不同的图像
- 更灵活
/
导出默认值{};
如果你有这样的结构
希望这能有所帮助对此的答案是,生产服务器使用了错误的部署,试图指向“public”文件夹,而不是在public_html上定位公共文件 当然,根据部署后,相对路径在开发和生产服务器上的工作方式完全相同 唯一的区别在于
server.php
文件中Laravel 5.8的步骤5
改变
到
相对路径如
<img src="img/logo.png">
在两台服务器上的工作方式相同
不幸的是,Laravel文档没有详细介绍这种部署方法,因为我怀疑有很多开发人员希望至少出于测试目的在共享服务器上部署。为什么在导入
logo.png
时错误会显示logo.jpg
对不起,这是一个png文件。我将问题改为反映这一点。您的图像存储在哪里?它位于哪里?完整路径请Ravel 5.8使用公用文件夹进行部署。我的图像当前位于公用文件夹中,因此绝对路径为“”。以上内容已简化以供讨论。您使用的是php artisan serve
?这给了我以下错误:未找到此依赖项:./node_modules/vue loader/lib/loaders/templateLoader.js中的@assets/logo.png??vue loader options/节点_模块/vue加载程序/lib?vue加载程序选项/resources/js/components/xxxx.vue?vue&type=template&id=abd0e146&scoped=true&您是否绝对确定您的徽标位于正确的路径中?应该在resources/assets/logo.pngThanks中,我将文件移动到resources/assets文件夹中。不幸的是,同样的结果。您说过使用img标签将使用webpack创建png的哈希版本。我需要告诉webpack在resources文件夹中查找资产,还是使用“@”前缀?顺便说一句,我看到的所有引用都说将图像文件放在public/文件夹中,而不是Laravel和Larevel Mix的resources/文件夹中。这些都不起作用。记住,我使用的是Laravel框架和Laravel mix。我怀疑这可能就是为什么这个指定的方法无法编译。无法工作。编译正常,但无法解析路径。实际上,src=“/asset/logo.png”适用于开发服务器,但不适用于生产服务器。我仍在搜索Laravel/Vue的最佳实践。这里没有“路径解析”,HTML按原样输出,即使图像根本不存在或路径完全不正确,它仍会编译,确保图像确实在该路径上,或者给我服务器上图像的URL,我将创建一个包含vue组件的沙盒,正确显示所述的ITA,这可以编译,并且图像确实显示为src=“/asset/logo.png”。
import image from "./assets/logo.png"
const image = '/assets/logo.png'
const image = 'http://example.com/’
if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
return false;
}
if ($uri !== '/' && file_exists(__DIR__.'/public_html'.$uri)) {
return false;
}
<img src="img/logo.png">